2017-02-07 26 views
1

ではなく、それを作成します1 Cであることの、次のシナリオスカラ:依存性注入

私はCに動物のインスタンスを提供することができますどのように
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" 
} 

を考えると?

それから、私の私の目標 である。しかし、これはクリーンなソリューションです

val bWithDog = new B((name: String) => new Dog(name)) 
val bWithCat = new B((name: String) => new Cat(name)) 

ことができます

class B(f : String => Animal) { 
    val animal: Animal = f(name) 
    private def name = "name for animal that B knows how to calculate" 
} 

ような何かをすることは可能でしょうか? Cのみがその名前を計算する方法を知っているので、Animal to Cを提供することは意味がありませんか?

答えて

0
class C(val animal: Animal) { 
private def name = "name for animal that C knows how to calculate" 
} 
new C(new Dog("fiddo")) 

コンストラクタ引数にはどのような問題がありますか?

+0

私はC以外の動物をどのように構築するか分かりません。なぜなら、Cはその名前を設定する方法を知っているからです。 – Bruno

+0

ああ、あなたは何を意味するのか分かりません。 – pedrofurla