Вы можете попробовать следующее.@Deprecated выдает предупреждение, если компилятор знает, что вы будете вызывать первый метод, а не второй.
@Override @Deprecated
public void update(ComponentUpdateEvent updateEvent) {
// throws a ClassCastException if its not the right type.
update((ConsoleUpdateEvent) updateEvent);
}
public void update(ConsoleUpdateEvent updateEvent) {
messages = updateEvent.getComponentState();
}
Кстати: вы не должны просто помещать throws Exception на все.Это, безусловно, не лучшая практика.
РЕДАКТИРОВАТЬ: Я реализовал другое решение этой проблемы, которое хорошо работает с OSGi, но может работать где угодно.
Обозреватель регистрирует себя у брокера и ожидает найтиметоды с аннотацией, такой как ObserverCallback.
например,
public class ConsoleDrawer extends Drawer {
@ObserverCallback
public void onConsoleUpdateEvent(ConsoleUpdateEvent updateEvent) {
messages = updateEvent.getComponentState();
}
}
public class DeviceDrawer extends Drawer {
@ObserverCallback
public void onDeviceUpdateEvent(DeviceUpdateEvent updateEvent) {
// do something.
}
}
В первом случае посредник находит метод с @ObserverCallback, который принимает один аргумент.Это единственный тип, который Брокер передаст.Второй класс ожидает другого типа.Наблюдатели могут иметь несколько методов / типов, что позволяет им обрабатывать разные сообщения различными методами, подходящими для этого типа.Вы также знаете, что никогда не получите тип данных, который вы не ожидаете.