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 两次。这种情况下的常见做法是什么?

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 回答