gpt4 book ai didi

java - Kotlin 反射 + 泛型

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:14 26 4
gpt4 key购买 nike

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

我有一个接口(interface)事件:

interface Event

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

class CustomEvent : Event { ... }

我现在一直在尝试做的是:给定一个将事件作为参数的方法(因此,任何实现 Event 接口(interface)的类),如下所示

fun onCustomEvent(event: CustomEvent) {
...
}

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


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.
}

但是对于 Kotlin,我真的不确定如何正确使用泛型,具体来说,什么才是正确的翻译方式

Class<? extends Event> 

对于 Kotlin,保持与上述 Java 代码相同的行为。

提前致谢。

最佳答案

感谢您的帮助;这将是在 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)
}

关于java - Kotlin 反射 + 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42096227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com