【发布时间】:2016-06-28 11:06:05
【问题描述】:
所以,我定义了一堆可堆叠的特征,如下所示:
trait Base {
val prefix: String = ""
def foo = ""
}
trait Foo extends Base {
override def foo = prefix + "/Foo" + ";" + super.foo
}
trait Bar extends Base {
override def foo = prefix + "/Bar" + ";" + super.foo
}
class Bat extends Foo with Bar {
override val prefix: String = "Bat"
}
new Bat().foo
上面返回Bat/Bar;Bat/Foo,这就是我想要的。
现在,问题当然是,prefix 只能有一个实例,而且,如果其中一个 mixin 试图覆盖它,它将无法工作,因为在 Bat 中定义的那个“胜过”它。这没关系,除了,我希望“行不通”的事情是明确的。
任何人都可以想到某种技巧,这会导致尝试在 trait 中覆盖 prefix 而不是在从它继承的类中导致编译错误?
【问题讨论】:
-
您可以将
prefix标记为final,但您也无法在Bat中覆盖它。 -
@EndeNeu 是的,我想那很多:)