2011-04-24 159 views
16

我想將一個特徵用作案例類的混搭。具有Mixin特徵的Scala案例類

case class Team(name:String) 

trait WinStreak{} 

,我想用它像這樣:

val team = Team("name") with WinStreak 

顯然,我不能這樣做。這是因爲case類使用伴隨對象來創建你的類的一個實例嗎?我知道另一種解決方案是擴展我的類def的特性,但我想知道它是否有可能創建混合風格。

回答

26

因爲Team("name")實際上是一個調用Team.apply("name")的方法,它在apply方法內部創建對象。

創建使用new關鍵字應該做的伎倆對象:

case class Team(name:String) 
trait WinStreak{} 

val x = new Team("name") with WinStreak 
+1

好點。我剛剛意識到,在使用case類時,您不能使用私有構造函數,並且不允許訪問構造函數......感謝您指出這一點。 – 2011-04-24 13:29:37