【发布时间】:2020-04-30 21:11:09
【问题描述】:
我正在用 Kotlin 编写一些基于协程的事件处理代码,它进展顺利。我在各种事件处理程序中有代码,它们做同样的事情,我试图把这段代码放在一个地方。我被困在以下问题上。这个想法是子类可以通过提供类到方法的映射来指定可以处理的事件类型。我无法编译它。有没有办法使这项工作?有更好的方法吗?谢谢。
abstract class EventHandler(private val handlers: Map<KClass<out Event>, suspend (Event) -> Unit>) {
suspend fun handle(event: Event) {
val handler = handlers[event::class]
if (handler != null) {
handler(event)
} else {
throw IllegalStateException("No handler configured for $event")
}
}
}
data class ExampleEvent(private val id: String): Event
class ExampleHandler(): EventHandler(mapOf(ExampleEvent::class to handleExample)) {
^^^^^^^^^^^^^ - compile error
suspend fun handleExample(event: ExampleEvent) {
TODO()
}
}
【问题讨论】:
标签: generics kotlin coroutine kotlin-coroutines