在Java中,我们可以做到这一点EventHandler
但是在Kotlin中,我试图复制该行为以替换此行为:
Events.handler(Handshake::class, object : EventHandler {
override fun handle(event: Handshake) {
println(event.sent)
}
})
用起来比较方便:
EventHandler
出于某种原因,参考EventHandler:
但是更优选地,我想使用以下更短的内容:EventHandler
或使用广告功能使用以下方法:EventHandler
这是我的EventHandler对象:
import java.util.*
import kotlin.reflect.KClass
object Events {
private val map = HashMap, Set>>()
fun handler(eventType: KClass, handler: EventHandler) {
handler(eventType.java, handler)
}
fun handler(eventType: Class, handler: EventHandler) = handlers(eventType).add(handler)
fun post(event: Any) = handlers(event.javaClass).forEach { it.handle(event) }
operator fun plus(event: Any) = post(event)
private fun handlers(eventType: Class): HashSet> {
var set = map[eventType]
if (set == null) {
set = HashSet>()
map.put(eventType, set)
}
return set as HashSet>
}
}
和我的EventHandler界面:
@FunctionalInterface
interface EventHandler {
fun handle(event: T)
}