我在Kotlin有一个方法如下:
fun <T : Event> addEventListener(eventClass: Class<T>, eventHandler: EventHandler<T>) {
eventListeners.put(eventClass, eventHandler)
}
我也有一个属性eventListeners
,但我无法弄清楚如何定义它,因此它将具有相同的泛型类型,有点像这样
private val eventListeners = HashMap<Class<T>, EventHandler<T>>()
显然,T
不会因属性eventListeners
而受到蔑视,而这正是我所挣扎的。
大家都知道,我明白T
可以为整个班级定义(例如class MyClass<T: Event> {...}
),这样就很简单,但在这个特殊情况下,我无法做到。
答案 0 :(得分:0)
你无法安全地做到这一点。你需要使用例如如果您只使用这两个功能访问eventListeners: HashMap<Class<*>, EventHandler<*>>
,则getEventListener
并投放listeners
这应该是安全的。提取到一个单独的类会阻止直接访问地图是合理的。