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代码被正确标记为无效?
答案 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) {}
}
现在您的通话将按预期失败:类型不匹配。