Ich habe eine generische Observer-Schnittstelle und eine Observable-Klasse gemacht, aber kann meine Klasse wegen einiger Generika Problem nicht kompilieren. Ich weiß nicht genau, warum das, was ich versuche, verboten ist. Der Code folgt:Problem mit Beobachter Muster und Generika in Java
public class Observable<U> {
private List<Observer<Observable<U>, U>> _observers =
new ArrayList<Observer<Observable<U>, U>>();
public void addObserver(Observer<? extends Observable<U>, U> obs) {
if (obs == null) {
throw new IllegalArgumentException();
}
if (_observers.contains(obs)) {
return;
}
_observers.add(obs); // This line does not compile
}
public void notifyObservers(U data) {
for (Observer<? extends Observable<U>, U> obs : _observers) {
// After correction of the list declaration, this line will not compile
obs.update(this, data);
}
}
}
interface Observer<T, U> {
public void update(T entity, U arg);
}
Können Sie die spezifische (n) Fehlermeldung (en) angeben, die Sie erhalten? –
Nach Korrektur der Listendeklaration: Von Eclipse: Die Methode atualizar (Capture # 4-of? Erweitert Observable , U) im Typ Observer, U> ist nicht anwendbar für die Argumente (Observable , U) –
Ersetzen Sie "atualizar" für "update" in meinem letzten Kommentar. –