Предположим, я могу добавить 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
, я использую событиеclass в качестве ключа для получения набора всех прослушивателей, подключенных к нему.
private void fire(Event event) {
Set<EventListener> listeners = listenerSets.get(event.getClass());
// ...
}
Теперь предположим, что у меня есть абстрактный суперкласс для связанных событий, например OrderChanged
в качестве суперкласса OrderLineAdded
.Некоторым слушателям может потребоваться узнать только, когда меняется порядок, без необходимости знать особенности.
Могу ли я каким-либо образом зарегистрироваться на этих суперклассах и вызвать слушателей в случае возникновения события подкласса?