Java 中的 Kotlin 泛型错误

Kotlin Generics Error in Java

给定以下三个kotlin 类:

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

class ConcreteUseCase : UseCase<List<String>>()

class Action<T>

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

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

错误说:

SomeClass<java.util.List<? extends Type>> in Class cannot be applied to SomeClass<java.util.List<Type>>

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

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

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

否则:Kotlin 中的 List 被声明为 interface List<out E>,即只有 E 的生产者,因此您的方法的参数类型 List<? extends T> 在 Java(生产者 extends,消费者 super)。您可以在 Kotlin 端使用 MutableList

class ConcreteUseCase : 
    UseCase<MutableList<String>>

此方法不使用 修饰符 (in/out),您将能够按预期调用该方法。

也可以使用 @JvmSuppressWildcards 解释 here

按如下方式更改您的 ConcreteUseCase

class ConcreteUseCase : UseCase<List<@JvmSuppressWildcards String>>()

有关详细信息,请访问此 link