Потребитель, играющий странно в Котлине

Я просто возвращаюсь в Котлин (переход из 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 существует и работает так, как ожидалось.

http://pksv.co/go/myOeEvTE

Есть ли что-то, что я, возможно, пропустил или пропустил?

Дурак я. Я так долго проснулся в голове. Замена Consumer<out Event> (и других пользователей) с помощью (Event) -> Unit очистил все!

Для всех, кто интересуется кодом:

 class EventBus(controller: Controller) { private val consumerMap : MutableMap<KClass<out Event>, MutableSet<(Event) -> Unit>> = ConcurrentHashMap() private val controller : Controller = controller public fun <T : Event> register(clazz: KClass<T>, handler: (T) -> Unit) { consumerMap.getOrPut(clazz, { HashSet() }).add(handler as (Event) -> Unit) // hacky cast :-) } 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.invoke(event) } } }