Kotlin"任何实现接口的类型"

时间:2017-08-19 17:21:18

标签: kotlin

我有一个委托界面:

interface Delegate {
    fun didSelectWord(word: String)
}

我希望有一个名为delegate

的属性
val delegate: <T> where T : Delegate

delegate可以是实现委托

的任何内容

我也试过

val delegate: Any : Delegate

但两者都给出了编译错误

2 个答案:

答案 0 :(得分:2)

解决方案非常简单

val delegate: Delegate

现在这样的工作

interface Delegate

class Test: Delegate {
    fun yourMethod() = "Your Method" 
}

fun test() {
    val delegate: Delegate

    delegate = Test()

    println(delegate)
}

如果您想使用仅存在于Test但不在Delegate中的功能,则必须使用

(delegate as Test).yourMethod()

否则只有Delegate中存在的功能才能正常工作

delegate.yourMethod()无效。

答案 1 :(得分:0)

你可以这样做:

class SomeClass<T : Delegate> {

     val delegate: T = // initialize delegate ...
}

使class成为声明类型参数T的泛型类型。您可以创建T类型的属性。