Key
一个事件类型的Key。所有的计划对外的事件类型都必须通过 伴生对象 实现此类型并提供一个事件唯一的ID名称。 并非所有的事件接口 Event 的类型都能够允许被监听,有些事件类型可能仅用做标记或者由于其他原因无法/不允许被直接监听, 因此在事件调度中,需要通过 Key 来判断事件类型与其之间的继承关系。
所有事件的 Key.id 必须尽可能保证唯一,因此建议对ID进行命名的时候使用较为特殊的命名方式以杜绝出现ID重复。 id重复不一定会出现异常提示,但是在使用 isSub 等方法的时候,很有可能会出现缓存内容混乱进而导致引发预期外的异常。
事件类型可以继承,且允许多继承,实现方可以通过 isSub 来判断当前事件是否为某个类型的子类型。
比如
val event: MessageEvent = ...
val isSub: Boolean = MessageEvent.Key isSub Event.Key
Content copied to clipboard
Key 的继承关系是单向传递的,因此你能够通过一个key找到它继承的所有父类型,但是无法反向查找。
当一个事件提供伴生Key的时候,E 建议且应当与当前事件类型一致, 因为在 Key.getKey 等通过类型获取Key的场景下,均默认为 Key 的类型与当前事件类型一致。 如下所示:
interface MyEvent : Event {
companion object Key: Event.Key<MyEvent> {
// ...
}
}
Content copied to clipboard