Когда событие должно быть обработано, просто извлеките обработчики из карты. Если 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);
    }
}    

Ответы на вопрос(5)

Ваш ответ на вопрос