我目前正試圖利用Java中的觀察者模式的通用實現我發現似乎工作得很好,除了它生成未經檢查的調用警告,我會如果可能的話要修復。實施看起來是這樣的:Java通用觀察者模式實現未經檢查的調用作爲原始類型
接口,IObservable.java:
public interface IObservable<T> {
void addObserver(IObserver<T> observer);
void removeObserver(IObserver<T> observer);
}
的基類Observable.java:
import java.util.ArrayList;
public class Observable<T> implements IObservable<T> {
private final ArrayList<IObserver<T>> observers
= new ArrayList<IObserver<T>>();
public void addObserver(IObserver<T> observer) {
synchronized (observers) {
observers.add(observer);
}
}
public void removeObserver(IObserver<T> observer) {
synchronized (observers) {
observers.remove(observer);
}
}
protected void notifyObservers(final T t) {
synchronized (observers) {
for (IObserver<T> observer : observers) {
observer.notify(t);
}
}
}
}
觀察員接口IObserver.java:
public interface IObserver<T> {
void notify(T model);
}
My Observable class Subject.java:
public class Subject extends Observable {
private int foo;
private int bar;
public int getFoo() { return foo; }
public int getBar() { return bar; }
public void setFoo(int f) {
foo = f;
notifyObservers(this);
}
public void setBar(int b) {
bar = b;
notifyObservers(this);
}
}
每次調用notifyObservers時都會發生未經檢查的調用警告。完整的警告
java: warning: [unchecked] unchecked call to notifyObservers(T) as a member of the raw type com.foo.Observable
有什麼辦法來解決這個問題,或者我應該只使用@SuppressWarnings(「未登記」)?或者,我甚至應該這樣,事實上,一個安全的方法調用?
這樣做:)我知道我不得不在某處丟失。我很高興這很簡單。 –
qwertymodo