我有一堂课是MyClass<T>
我需要将其子类化为MySubclass<Nothing>
但有时我需要发送MyClass
对 Java 函数的引用,该函数又可以接收MySubclass
,我该如何声明它以使其兼容?
还是我应该简单地使用void receiveClass(aClass: MyClass<*>)
?
我有一堂课是MyClass<T>
我需要将其子类化为MySubclass<Nothing>
但有时我需要发送MyClass
对 Java 函数的引用,该函数又可以接收MySubclass
,我该如何声明它以使其兼容?
还是我应该简单地使用void receiveClass(aClass: MyClass<*>)
?
如果我正确理解了您的问题,您可以执行以下操作:
// 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