Kotlin Generics Java中的错误

鉴于以下三个kotlin类:

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的> in Class不能应用于SomeClass <java.util.List >

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

更改您的ConcreteUseCase如下:

 class ConcreteUseCase : UseCase>() 

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

要在不触及Kotlin的情况下简单地修复Java代码:

 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