型で再帰的な特性でメソッドを記述しようとしていますが、コンパイラが自分のしていることを知っていると確信できるような方法で基本ケースを記述できないという問題に直面しています。
要点は次のとおりです。
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
いますが、具体的な実装はありません。すべてがその1つの方法にあります。
トレイトを 2-- に分割できると思いますがBaseInheritableTrait
、これは を呼び出さず、呼び出しsuper
をDerivedInheritableTrait
含みますがsuper
、これに対処するより良い方法はありますか?
できるようになりたいのですがsuper.asInstanceOf[InheritableTrait].doSomething()
、それは不可能のようです。