Когда событие должно быть обработано, просто извлеките обработчики из карты. Если Class.equals () и Class.hashCode () не работают так, как вы хотите, вам понадобится обертка, чтобы получить желаемое поведение.
я хочу, чтобы EventHandler обрабатывал EventA одним способом, EventB другим способом и любыми другими событиями (EventC, EventD) еще одним способом. EventReceiver получает только ссылку на событие и вызывает EventHandler.handle (). Разумеется, всегда вызывается версия EventHandler.handle (Event event).
Без использования instanceOf, есть ли способ полиморфно отправить (возможно, с помощью другого метода в EventHandler или generics) в соответствующий метод handle?
class EventA extends Event {
}
class EventB extends Event {
}
class EventC extends Event {
}
class EventD extends Event {
}
class EventHandler {
void handle(EventA event) {
System.out.println("Handling EventA");
}
void handle(EventB event) {
System.out.println("Handling EventB");
}
void handle(Event event) {
System.out.println("Handling Event");
}
}
class EventReceiver {
private EventHandler handler;
void receive(Event event) {
handler.handle(event);
}
}