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

科特林代码:

class Inva{ fun  x(y:T) {} } fun main(args: Array) { var inva = Inva() inva.x(“123”) } 

Java相当于:

 public class Vab { void x(T y) {} public static void main(String[] args) { Vab vab = new Vab(); vab.x("123"); } } 

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

这些代码片段并不等同 ,因为Java代码片段使用类的types参数而不是声明自己的types。

一个可比较的Java方法声明就像这样(注意方法本身附加的 ):

  void x(T y) {} 

随着这一变化,Java类将像Kotlin变体一样编译。

首先,您的main签名是错误的,您应该使用Array而不是Array

你的类有一个types参数T ,它是完全不用的。 嵌入式函数x也有一个types参数T ,它与类types参数无关。 您可以更改function签名,如下所示:

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

现在您的电话会按预期失败: types不匹配