我想我已经在某处读过这是可能的。
我想创建一个特性,当混合时,通过覆盖方法并将覆盖方法的结果存储在val中来记忆hashCode。
trait MemoHashCode {
val hashCode = callToOverwritten_hashCode
}
答案 0 :(得分:9)
只需使用super
关键字:
trait MemoHashCode {
val hashCode = super.hashCode
}
这是可能的,因为每个特征都隐含地扩展AnyRef
,其中hashCode
已定义。
如果要使用未在每个对象上定义的方法,则必须确保该特征只能与具有您将要使用的方法的对象混合使用。这可以通过自我类型注释来实现:
trait MemoSomethingElse {
this: SomeType => // SomeType has method somethingElse
val somethingElse = super.somethingElse
}