2

パラメーター化されたコンポーネントは、型指定された各コンポーネントの一意のコンポーネントにのみ関心がある限り、ケーキ パターンでうまく機能します。例:

trait AComponent[T] {
  val a:A[T]

  class A[T](implicit mf:Manifest[T]) {
    println(mf)
  }
}

class App extends AComponent[Int] {
  val a = new A[Int]()
}

new App

現在、私のアプリケーションでは、A[Int] と A[String] を注入する必要があります。明らかに、scala の型システムでは、AComponent を 2 回拡張することはできません。この状況での一般的な方法は何ですか?

4

1 に答える 1

1

AComponent 自体をパラメータ化する必要はないと思います。タイプパラメータを緩めて、これを次のように変更します

trait AComponent {
    val aInt: A[Int]
    val aStr: A[String]
    class A[T](implicit mf:Manifest[T]) {
        println(mf)
    }
} 

class App extends AComponent {
    val aInt = new A[Int]()
    val aStr = new A[String]()
}

Int と String のインスタンスを提供できるようにしたい場合

于 2012-11-20T16:57:01.600 に答える