Java中观察者模式和泛型的问题

Thi*_*ves 4 java generics observer-pattern

我已经创建了一个通用的Observer接口和一个Observable类,但由于一些泛型问题而无法编译我的类.我不知道为什么我要做的事情是被禁止的.代码如下:

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);
}
Run Code Online (Sandbox Code Playgroud)

tdd*_*key 6

将_observers定义更改为:

private List<Observer<? extends Observable<U>, U>> _observers = 
        new ArrayList<Observer<? extends Observable<U>, U>>();
Run Code Online (Sandbox Code Playgroud)

如果要允许子类,则需要在声明中指定它,而不仅仅是在您使用它的位置