我想我已经在某处读过这是可能的.
我想创建一个特性,混合时通过覆盖方法并将覆盖方法的结果存储在val中来记忆hashCode.
trait MemoHashCode {
val hashCode = callToOverwritten_hashCode
}
Run Code Online (Sandbox Code Playgroud)
只需使用super关键字:
trait MemoHashCode {
val hashCode = super.hashCode
}
Run Code Online (Sandbox Code Playgroud)
这是可能的,因为每个特征都隐含地扩展AnyRef了已经hashCode定义的特征.如果要使用未在每个对象上定义的方法,则必须确保该特征只能与具有您将要使用的方法实现的对象混合使用.这可以通过自我类型注释:
trait MemoSomethingElse {
this: SomeType => // SomeType has method somethingElse
val somethingElse = super.somethingElse
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
785 次 |
| 最近记录: |