1
考虑以下情形斯卡拉:依赖注入
abstract class Animal {/***/}
class Dog(s : String) extends Animal {/***/}
class Cat(s :String) extends Animal {/***/}
class C() {
val animal: Animal = new Dog(name)
private def name = "name for animal that C knows how to calculate"
}
我怎样才能提供一个Animal实例C,而不是为C谁创造它的人?
这是可以做到像
class B(f : String => Animal) {
val animal: Animal = f(name)
private def name = "name for animal that B knows how to calculate"
}
,然后让我
val bWithDog = new B((name: String) => new Dog(name))
val bWithCat = new B((name: String) => new Cat(name))
这是我的目标 但是,这是一个干净的解决方案? 或者向C提供动物是没有意义的,因为只有C知道如何计算它的名字?
我不知道如何构建C以外的动物,因为只有C知道如何设置它的名字 – Bruno
哦,我明白你的意思了,你没有在问题中提到。 – pedrofurla