我有以下結構:與混入特質豐富對象
trait Runner {
def run: Unit
}
trait LoggableRunner extends Runner {
abstract override def run {
println("logging enter")
super.run
println("logging exit")
}
}
class RealRunner extends Runner {
def run = println("running...")
}
這樣我可以豐富我的日誌類以下列方式:
val a = new RealRunner with LoggableRunner
它增加前和運行後登錄信息run
方法。
現在我真正想要的是能夠構建具有特徵的scala對象。我曾嘗試以同樣的方式:
object RealRunner extends LoggableRunner{
def run = println("running...")
}
,但我得到:method run needs override modifier
所以,我想:
object RealRunner extends LoggableRunner{
override def run = println("running...")
}
,但我得到:method run needs abstract override modifiers
。所以我再次嘗試添加抽象,我得到:abstract override modifier only allowed for members of traits
。
甚至可能將特質混合到物體中?
嗯,我不知道_why_它是這樣做的,但是你可以分兩步做你想做的事情:首先定義一個class class RealRunner extends Runner {def print = {...}}',然後: '對象RealRunner使用LoggableRunner擴展RealRunner'。 – Dima
這樣一個瘋狂的用例:) – ipoteka
@ipoteka「瘋狂」? – Dima