我對java非常陌生,所以我提前抱歉,如果有什麼我說聽起來新鮮,溫柔。Java觀察者模式 - 如何在更新(通知)循環/迭代期間刪除觀察者?
我已經實現了一個基本的觀察者模式。一些觀察者應該只聽一個更新,然後立即從觀察者/聽衆列表中刪除自己。但是,每當我嘗試這樣做時,我都會遇到着名的java.util.concurrentmodificationexception錯誤。
我很明顯得到這個錯誤,因爲我在改變列表的同時還在迭代它,但我仍然不確定什麼是正確的解決方案。我想知道我是否以正確的方式做這件事。如果我是,那麼需要什麼修復才能使它工作?如果我不是,我希望得到更好的方法來實現我想要做的事情。
這裏是我的代碼:
public interface Listener {
public void onValueChange(double newValue);
}
public class Observed {
private int value;
List<Listener> listeners = new ArrayList<>();
public void addListener(Listener toAdd) {
listeners.add(toAdd);
}
public void removeListener(Listener toRemove) {
listeners.remove(toRemove);
}
public void changeValue(double newValue) {
value = newValue;
for (Listener l : listeners) l.onValueChange(newValue);
}
}
public class SomeClassA implements Listener{
private Observed observed;
SomeClassA(Observed observed) {
this.observed = observed;
}
@Override
public void onValueChange(double newValue) {
System.out.println(newValue);
observed.removeListener(this);
}
}
public class SomeClassB implements Listener{
@Override
public void onValueChange(double newValue) {
System.out.println(newValue);
}
}
public class ObserverTest {
public static void main(String[] args) {
Observed observed = new Observed();
SomeClassA objectA = new SomeClassA(observed);
SomeClassB objectB = new SomeClassB();
observed.addListener(objectB);
observed.addListener(objectA);
observed.changeValue(4);
}
}
缺少在'value =(int)double之前強制轉換;' – herry