假设我可以根据事件的EventListener
向EventDispatcher
添加Class<T>
,
private Map<Class<?>, Set<EventListener>> listenerSets;
public <E extends Event<E>> void addListener(EventListener<E> listener, Class<E> eventClass) {
Set<EventListener> listeners = listenerSets.get(eventClass);
listeners.add(listener);
}
要查找特定Event
的所有添加的侦听器,我使用事件的类作为键来检索与之挂钩的所有侦听器的集合。
private void fire(Event event) {
Set<EventListener> listeners = listenerSets.get(event.getClass());
// ...
}
现在假设我有一个相关事件的抽象超类,例如OrderChanged
作为OrderLineAdded
的超类。一些听众可能只想知道订单何时更改,而无需了解具体信息。
我可以某种方式在这些超类上注册并在子类事件发生时触发侦听器吗?
答案 0 :(得分:0)
我认为最好的选择是仅对listenerSets
进行遍历,并找到为OrderChanged
的超类注册的所有侦听器,并对其进行通知。
private void fire(OrderLineAdded event) {
listenerSets.entrySet().stream()
.filter( e -> e.getKey().isAssignableFrom( event.getClass() ) )
.forEach( e -> {
Set<EventListener> events = e.getValue();
} );
}
当然,您需要addListener
之前OrderChanged
。