Kotlin类类型参数:未检测到不匹配

时间:2017-12-30 19:49:10

标签: java kotlin

Kotlin代码:

class Inva<T>{
    fun <T> x(y:T) {}
}

fun main(args: Array<Integer>) {
    var inva = Inva<Int>()
    inva.x(“123”)
}

Java等效:

public class Vab<T> {

    void x(T y) {}

    public static void main(String[] args) {

       Vab<Integer> vab = new Vab<Integer>();

       vab.x("123");

   }
}

为什么Kotlin代码允许不变量,而Java代码被正确标记为无效?

2 个答案:

答案 0 :(得分:5)

这些代码段不等同,因为Java代码段使用其类的type参数而不是声明它自己的类型参数。

类似的Java方法声明就是这样(请注意方法本身的附加<T>):

<T> void x(T y) {}

通过此更改,Java类将像Kotlin变体一样进行编译。

答案 1 :(得分:2)

首先,您的main签名有误,您应该使用Array<String>代替Array<Integer>

您的类具有类型参数T,该参数完全未使用。嵌入式函数x也有一个类型参数T,它与类类型参数无关。您可以按如下方式更改功能签名:

class Inva<T>{
    fun x(y:T) {}
}

现在您的通话将按预期失败:类型不匹配