我正在尝试在类型上递归的特征中编写一个方法,但是我遇到了一个问题,即我无法以编译器确信我知道自己在做什么的方式编写基本案例。
这是一个要点:
trait InheritableBehavior {
def superClassWithInheritableBehavior: Option[Class[_]] = {
// reflection and magic (from some library's code)
}
def doSomething() {
if (this.superClassWithInheritableBehavior.isDefined) {
super.doSomething()
} else {
// base case here, which relies on local fields
}
}
}
doSomething()
编译器建议我用标记abstract override
,但没有具体的实现。一切都在这一种方法中。
我想我可以将 trait 分成两BaseInheritableTrait
部分,一个不调用super
,DerivedInheritableTrait
一个包括super
调用,但是有没有更好的方法来处理这个问题?
我希望能够做的是super.asInstanceOf[InheritableTrait].doSomething()
,但这似乎是不可能的。