Kotlin 反射 + 泛型

Fra*_*sco 3 java generics reflection kotlin

编辑 1:更改标题,我的错。

我有一个接口事件

interface Event
Run Code Online (Sandbox Code Playgroud)

还有一些实现它的类,比如CustomEvent

class CustomEvent : Event { ... }
Run Code Online (Sandbox Code Playgroud)

我现在一直在尝试做的是:给定一个将事件作为参数的方法(因此,任何实现Event接口的类),就像这样

fun onCustomEvent(event: CustomEvent) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

,我想将该事件添加到列表中。因此,这个列表最终将包含一堆不同的事件。


Java 中,我相信它会是这样的(可能不是 100% 准确):

List<Class<? extends Event>> eventsList;

....

Class<?> param = methodThatHasSomeEventAsParam.parameterTypes[0];

if (Event.class.isAssignableFrom(param)) {
    Class<? extends Event> actualParam = (Class<? extends Event>) param;
    eventsList.add(actualParam); // Adds CustomEvent to the events list.
}
Run Code Online (Sandbox Code Playgroud)

但是对于 Kotlin,我真的不确定如何正确使用泛型,特别是什么是正确的翻译方法

Class<? extends Event> 
Run Code Online (Sandbox Code Playgroud)

到 Kotlin,保持与上面 Java 代码相同的行为。

提前致谢。

Fra*_*sco 5

谢谢您的帮助; 这将是在 Kotlin 中做到这一点的方式:

// <? extends Event> in Java ==> <out Event> in Kotlin.
val myList: MutableList<Class<out Event>>

val param: Class<*> = methodThatHasSomeEventAsParam.parameterTypes[0]

if (Event::class.java.isAssignableFrom(param)) {
    param as Class<out Event>
    myList.add(param)
}
Run Code Online (Sandbox Code Playgroud)