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 extends T>
List extends T>
在Java中有通配符(Producer extends
,Consumer super
)。 你可以在Kotlin端使用MutableList
:
class ConcreteUseCase : UseCase>
这个不使用声明站点差异修饰符( in
/ out
),您将能够按预期方式调用该方法。
这里也可以使用@JvmSuppressWildcards
。