Кажется, что Java не может выбрать наиболее подходящую реализацию метода, основанную на типе времени выполнения аргумента, как задокументировано здесь . Повторим пример:
class Superclass {}
class Subclass extends Superclass {}
class Test {
public void aMethod(Superclass s) {...}
public void aMethod(Subclass s) {...}
}
Какой метод класса Test выполняется, определяется на основе типа ссылки, а не типа экземпляра. Опять же, на основе связанных примеров:
Test aTest = new Test();
Superclass aSuper = new Subclass();
test.aMethod(aSuper);
Выполняется aMethod(Superclass s)
, а не aMethod(Subclass s)
.
Я пытался создать вариант шаблона слушателя, где слушатели «подключаются» через интерфейс, а у слушателей есть методы, определенные для подклассов интерфейсов.
В качестве быстрого примера того, что я имею в виду, скажем, я создаю будильник, в который можно включить функциональность.
Реализация вышеупомянутого, которую я имел в виду, выглядела бы как интерфейс Event
с подклассом WakeUpEvent
и интерфейсом EventListener
, требующим реализации handle(Event evt)
.
Я надеялся создать класс, реализующий no-op handle(Event evt)
с конкретным handle(WakeUpEvent evt)
, если слушатель хотел иметь дело с этим типом события.
Конечно, этот подход не будет работать как есть - очевидным решением является время выполнения instanceof
проверок - юк.
Существуют ли какие-либо модели или подходы, которые я могу использовать, чтобы получить желаемое поведение?