4
我剛剛回到Kotlin(從Java過渡),我注意到使用Consumer
比聽起來更棘手。消費者在科特林扮演奇怪的角色
class EventBus(controller: Controller) {
private val consumerMap : MutableMap<KClass<out Event>, MutableSet<Consumer<out Event>>> = ConcurrentHashMap()
private val controller : Controller = controller
public fun <T : Event> register(clazz: KClass<T>, handler: Consumer<T>) {
consumerMap.getOrPut(clazz, { HashSet() }).add(handler)
}
public fun <T : Event> post(event : T) {
consumerMap[event.javaClass.kotlin]?.forEachIndexed { i, handler ->
controller.getLogger().trace("Firing handler ${i + 1} for event ${event.javaClass.name}")
handler.accept(event)
}
}
}
我試圖做一個簡單的類射擊死的基本事件,唯一的問題是根據的IntelliJ accept方法不存在。然而,當我試圖創建一個新的消費者並立即使用它時,accept方法就在那裏,並且正如預期的那樣工作。
有什麼我可能錯過或忽視?