Kotlin:超类不能从特质中获得
在Kotlin,给一些类:
public open class A { open fun sayHi() = "hi" }
而一个特征T需要子类来扩展A:
public trait T : A { override fun sayHi() = super.sayHi() + " John" }
人们会希望T.sayHi
能够调用super.sayHi()
或更明确的super<A>.sayHi()
,因为所有的类型信息都在那里,但是相反,它产生的Superclass is not accessible from trait
。
题:
[我怎么能]从特质中重写一些方法?
笔记:
当然,没有压倒一切,我可以这样做:
public trait T : A { fun another() = sayHi() + " John" }
但是我希望我的特质能够“拦截/处于中间”。
我不得不使用一些委托,以实现类似的行为,但我想知道是否有可能使用特质做到这一点。
当@Salomon指出他的评论时,这个特性将会在新版本的Kotin上被删除,使得这个问题不再有效。
必需的类
你们中的一些人可能听说过这个特性:Kotlin中的特性可以“扩展”类(我们实际上使用术语“require”)。
从技术上讲,这意味着当一个类扩展了这个特性时,它必须(直接或间接)扩展所需的类。 这个特性有很少的用例,所以我们不推荐使用它。
资料来源: http : //blog.jetbrains.com/kotlin/2015/04/upcoming-changes-and-more/