1
我有下面的類層次結構:斯卡拉通用亞型和蛋糕模式
abstract class Event(val timeStamp:Long,val id:Long)
case class StudentEvent(override val timeStamp:Long, override val id:Long,
firstName:String,lastName:String) extends Event(timeStamp,id)
case class TeacherEvent(override val timeStamp:Long, override val id:Long,
firstName:String,lastName:String.....) extends Event(timeStamp,id)
現在我有以下特點:
trait Action[T <: Event] {
def act[T](event:T)
}
現在我想延長這種特質爲學生和教師:
trait StudentAction extends Action[StudentEvent]{
def act(event:StudentEvent) = println(event)
}
trait TeacherAction extends Action[TeacherEvent]{
def act(event:TeacherEvent) = println(event)
}
現在我想創建一個處理所有類型事件的Handler類:
class Handler{
self:Action[Event] =>
def handle(event:Event) = act(event)
}
現在,當我嘗試創建處理程序對某些類型的事件,我得到的編譯錯誤:
val studentHandler = new Handler with StudentAction
illegal inheritance; self-type Handler with StudentAction does not conform to Handler's selftype Handler
with Action[Event]
我缺少什麼?