2012-11-20 64 views
2

參數化組件與蛋糕的圖案很好地工作,只要你是隻在一個獨特的成分爲每個類型的組件,例如興趣:scala的蛋糕模式可能帶有參數化組件嗎?

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的類型系統不允許我將兩個組件擴展。這種情況下常見的做法是什麼?

回答

1

我認爲AComponent不需要自己參數化。那麼松類型參數,如果你希望能夠爲int和string

+0

提供情況下,它確實是更好的解決方案,如果他的例子不僅說明和缺少一些變成

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]() } 

這與他意圖實現的相關部分。 – pedrofurla

+0

感謝您的回答。這確實是我遇到的最好的。這樣做的問題是注入B [T](a:A [T])的BComponent需要調用帶有類型參數的B上的構造函數。 (通常是'val bInt = new B(aInt)'),這會降低蛋糕模式在這種情況下的價值 – Nicolas