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/