如何为Kotlin属性指定参数化泛型?

时间:2017-12-01 02:43:24

标签: kotlin

我在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> {...}),这样就很简单,但在这个特殊情况下,我无法做到。

1 个答案:

答案 0 :(得分:0)

你无法安全地做到这一点。你需要使用例如如果您只使用这两个功能访问eventListeners: HashMap<Class<*>, EventHandler<*>>,则getEventListener并投放listeners这应该是安全的。提取到一个单独的类会阻止直接访问地图是合理的。