Java中的Kotlingenerics错误

鉴于以下三个科林类:

abstract class UseCase { fun execute(action: Action) { } } class ConcreteUseCase : UseCase<List>() class Action 

我无法在java代码中编译以下行:

 ConcreteUseCase s = new ConcreteUseCase(); s.execute(new Action<List>());//<<<<<<< compilation error 

在这里输入图像说明

错误说:

SomeClass的<java.util.List的>不能应用于SomeClass <java.util.List >

我对kotlin还是一个新的东西,这可能是非常小的东西,但我似乎无法弄清楚。 我将不胜感激任何帮助。

改变你的ConcreteUseCase如下:

 class ConcreteUseCase : UseCase>() 

有关更多信息,请访问此链接

要简单地修复Java代码而不碰Kotlin:

 public static void main(String[] args) { ConcreteUseCase s = new ConcreteUseCase(); Action> listAction = new Action<>(); s.execute(listAction); } 

否则:Kotlin中的List被声明为interface List ,即只有E的生产者,因此你的方法的参数typesList List在Java中有通配符(Producer extends ,Consumer super )。 你可以在Kotlin端使用MutableList

 class ConcreteUseCase : UseCase> 

这个不使用声明站点差异修饰符( in / out ),您将能够按预期方式调用该方法。

这里也可以使用@JvmSuppressWildcards