【发布时间】:2017-02-07 17:29:01
【问题描述】:
编辑 1:更改标题,我的错。
我有一个界面事件:
interface Event
还有一些实现它的类,比如CustomEvent:
class CustomEvent : Event { ... }
我现在一直在尝试做的是:给定一个将事件作为参数的方法(因此,任何实现 Event 接口的类),就像这样
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 代码相同的行为。
提前致谢。
【问题讨论】:
-
简而言之,Java
<? extends Event>的等价物是<out Event>。它解决了你的问题吗?如果没有,还可以更轻松地查看您的 Kotlin 代码。此外,如果有兴趣,请参阅参考资料的 Generic Variance 部分以了解 Kotlin 泛型。 -
哇,确实解决了!我已经阅读过文档,并且已经尝试过
。但是在阅读了您的评论后,我再次尝试,只是注意到其他地方出现了一个愚蠢的错误,它无法正常工作......谢谢! :) -
@Frank 您甚至可以发布一个答案,说明它是如何解决它的,这样如果其他人偶然发现您的问题,他们可能会从您获得的清晰度中受益。
标签: java generics reflection kotlin