由于会有许多消息类型,因此我需要为每种类型创建一个接口,称之为MessageTypeAListener、MessageTypeBListener等,每个接口将包含一个处理方法,我的GUI类将实现该方法。然而,将会有许多类型,而不是针对每种类型维护一个侦听器列表和几个“触发”方法,我想要一个大的侦听器列表和一个具有类型的触发方法。然后,触发方法可以说“只触发我指定类型的侦听器”。
例如(伪代码):
ListenerList.Add(MessageTypeAListener);
ListenerList.Add(MessageTypeBListener);
<T> fire(message) {
ListenerList.Where(type is T).handle(message)
}
...
fire<MessageTypeAListener>(message);
然而,类型擦除似乎使此变得困难。我可以尝试强制转换并捕获异常,但这似乎不正确。是否有一种清晰的实现方式,或者保留每种类型的单独监听器列表更为明智,即使会有大量的类型?
EventListenerList
- 它可以容纳任意数量的侦听器类型的侦听器。 - Nate W.listener.class
,而是必须使用listener.getClass()
,它将返回监听器对象(DefaultButtonListener
)的运行时类型,而不是监听器接口类型(IButtonListener
)。 - Nate W.