0

我有一堂课是MyClass<T>

我需要将其子类化为MySubclass<Nothing>

但有时我需要发送MyClass对 Java 函数的引用,该函数又可以接收MySubclass,我该如何声明它以使其兼容?

还是我应该简单地使用void receiveClass(aClass: MyClass<*>)

4

1 回答 1

0

如果我正确理解了您的问题,您可以执行以下操作:

// Kotlin:
open class MyClass<T>
class MySubclass : MyClass<Nothing>()
// Java:
static <E> void receiveClass(MyClass<E> c) {
}

static void receiveClass1(MyClass<?> c) {
}
// Kotlin:
@JvmStatic
fun main(args: Array<String>) {
  receiveClass(MySubclass())
  receiveClass1(MySubclass())
}

这两种变体在运行时都可以工作并且是等效的,区别在于编译时是否需要类型安全中的类型信息<E>receiveClass

于 2021-10-14T21:29:20.937 回答