あなたの質問にエラーがあるありがとうので、それは間違った答えのためにあなたを可能にします。
最初にコンセプトのアイデアを修正しましょう。だけで正常に動作し
trait
trait Foo[T] { def hello: T }
を持ちます。
class FooImpl1 extends Foo[Int] { override def hello: Int = 42 }
class FooImpl2 extends Foo[String]{ override def hello: String = "test" }
そして彼らはないかもしれない:しかし、その後、この特性を拡張する特定のクラスは、FEになり、その後、Int
またはString
がためだけNAMEあるので
class FooImpl[Int] extends Foo[Int] { override def hello: Int = 42 }
class FooImpl[String] extends Foo[String]{ override def hello: String = "test" }
ジェネリックパラメータA
とB
でもかまいませんが、あなたは混乱してしまいました。これは整理持つ
、あなたはFooImpl1
とFooImpl2
を持っていることを知っている知っています。 同じスコープ内で同じ名前の2つのクラスを持つことができないため、それらは異なる名前を必要とします。
これは問題ありません。ので、あなたがするとき:
bind(classOf[X]).to(classOf[Y])
あなたのクラスがInterface
またはTrait
X
のメソッドを呼び出すたびにクラスY
の実装を提供したいと言っています。
には、インスタンス化できるクラスが用意されています。ジェネリックパラメータでクラスをインスタンス化することはできませんでした。
そして、終了する、あなたの適切な結合は次のようになります。
bind(new TypeLiteral[Foo[Int]](){}).to(classOf[FooImpl1])
bind(new TypeLiteral[Foo[String]](){}).to(classOf[FooImpl2])
どのように 'バインド(classOf [フー])について。こんにちはDima、あなたの答えをありがとう。(FooImpl ) ' –
frozen
' bind(classOf [Foo [_]])。(classOf [FooImpl [_]]) ' – Dima
それは動作しているように見えますが、私は別の問題に直面しているので、今すぐ確認することができません。クラスに2つの暗黙的なパラメータがあり、Guiceと注入を使用して正しく提供されていないように見えます。それがうまくいけば、私はそれで私の質問に答えることができるようにあなたに知らせます。 – Jeep87c