Kotlin:超级课程无法从特质中获取

时间:2015-02-03 11:48:01

标签: traits kotlin

在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"
}

但我确实希望我的特质能够“拦截/处于中间”。

我必须使用一些委托来实现类似的行为,但我想知道是否可以使用特征来做到这一点。

1 个答案:

答案 0 :(得分:1)

@Salomon在评论中表示,此功能将在较新版本的Kotin中删除,使此问题不再有效。

  

必需的课程

     

有些人可能听说过这个功能:Kotlin的特质可以   “扩展”类(我们实际上使用术语“要求”)。

     

从技术上讲,这意味着当一个类延伸这样一个特征时,它必须   (直接或间接)扩展所需的类别。这个   功能用例很少,所以我们不推荐使用它。

来源:http://blog.jetbrains.com/kotlin/2015/04/upcoming-changes-and-more/