Добре. Така че се опитвам да настроя GUI за приложение, използвайки модела на наблюдателя. По стандартен начин; ако Observable се актуализира, той извиква метода за актуализиране на всички свои наблюдатели, предавайки ComponentUpdateEvent, както следва:
public interface Observable {
ArrayList<Observer> observers = new ArrayList<Observer>();
public void updateObservers();
public void addObserver(Observer observer);
public void removeObserver(Observer observer);
}
public interface Observer {
public void update(ComponentUpdateEvent updateEvent);
}
public abstract class ComponentUpdateEvent {
public abstract ComponentType getComponentType();
}
Имам редица различни компоненти, които имплементират Observable, в "моделната" страна на приложението. Всеки тип компонент има отделен подклас на класа Drawer, който имплементира Observer, за изобразяване в JPanel.
Проблемът е, че се опитвам да направя така, че когато се извика методът за актуализиране на подклас на Drawer, предаваният параметър updateEvent да може да бъде подклас на ComponentUpdateEvent.
Въпреки това, очевидно, ако се опитам да направя това, както следва:
@Override
public void update(ConsoleUpdateEvent updateEvent) throws Exception {
if (this.componentType != updateEvent.get)) {
throw new Exception("ComponentType Mismatch.");
}
else {
messages = updateEvent.getComponentState();
}
}
Получавам грешката на компилатора:
The method update(ConsoleUpdateEvent) of type ConsoleDrawer must override or implement a supertype method.
Тъй като подписът на метода не е същият. Изглежда не мога да преодолея този проблем, без да имам отделни класове наблюдатели за всеки тип компонент, възможно ли е да се реши този проблем с генерични продукти? Всяка помощ ще бъде оценена.