在Kotlin,给出了一些课程:
public open class A {
open fun sayHi() = "hi"
}
需要子类扩展A:
的特征T.public trait T : A {
override fun sayHi() = super.sayHi() + " John"
}
我们希望T.sayHi
能够调用super.sayHi()
或更明确的super<A>.sayHi()
,因为所有类型信息都在那里,但它会产生Superclass is not accessible from trait
。< / p>
问题:
[如何]我可以从特征中覆盖某些方法?
备注:
当然,如果没有压倒我就可以做到:
public trait T : A {
fun another() = sayHi() + " John"
}
但我确实希望我的特质能够“拦截/处于中间”。
我必须使用一些委托来实现类似的行为,但我想知道是否可以使用特征来做到这一点。
答案 0 :(得分:1)
@Salomon在评论中表示,此功能将在较新版本的Kotin中删除,使此问题不再有效。
必需的课程
有些人可能听说过这个功能:Kotlin的特质可以 “扩展”类(我们实际上使用术语“要求”)。
从技术上讲,这意味着当一个类延伸这样一个特征时,它必须 (直接或间接)扩展所需的类别。这个 功能用例很少,所以我们不推荐使用它。
来源:http://blog.jetbrains.com/kotlin/2015/04/upcoming-changes-and-more/