Java中的Kotlin泛型错误
考虑到以下三种kotlin等级:Java中的Kotlin泛型错误,java,android,generics,kotlin,kotlin-generics,Java,Android,Generics,Kotlin,Kotlin Generics,考虑到以下三种kotlin等级: abstract class UseCase<T> { fun execute(action: Action<T>) { } } class ConcreteUseCase : UseCase<List<String>>() class Action<T> 抽象类用例{ 乐趣执行(动作:动作){ } } 类ConcreteUseCase:UseCase() 集体诉讼 我无法用ja
abstract class UseCase<T> {
fun execute(action: Action<T>) {
}
}
class ConcreteUseCase : UseCase<List<String>>()
class Action<T>
抽象类用例{
乐趣执行(动作:动作){
}
}
类ConcreteUseCase:UseCase()
集体诉讼
我无法用java代码编译以下行:
ConcreteUseCase s = new ConcreteUseCase();
s.execute(new Action<List<String>>());//<<<<<<< compilation error
ConcreteUseCase s=新的ConcreteUseCase();
s、 执行(新操作())// 要在不接触Kotlin的情况下简单地修复Java代码,请执行以下操作:
public static void main(String[] args) {
ConcreteUseCase s = new ConcreteUseCase();
Action<List<? extends String>> listAction = new Action<>();
s.execute(listAction);
}
这个方法不使用修饰符(in
/out
),您可以按预期调用该方法
还可以按照说明使用@JvmSuppressWildcards
。更改具体用例,如下所示:
class ConcreteUseCase : UseCase<List<@JvmSuppressWildcards String>>()
classconcreteusecase:UseCase()
有关更多信息,请访问此感谢您的深入了解。我喜欢你的回答。现在我将使用@JvmSuppressWildcards
。很好的选择。问题是,似乎您的修复程序强制用户指定一个可变列表,这可能是不需要的。根本不是。只是用它来说明发生了什么。“你们可以保持列表不变,”我添加了一个例子
class ConcreteUseCase : UseCase<List<@JvmSuppressWildcards String>>()