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)
将_observers定义更改为:
private List<Observer<? extends Observable<U>, U>> _observers =
new ArrayList<Observer<? extends Observable<U>, U>>();
Run Code Online (Sandbox Code Playgroud)
如果要允许子类,则需要在声明中指定它,而不仅仅是在您使用它的位置
| 归档时间: |
|
| 查看次数: |
4069 次 |
| 最近记录: |