从技术上讲,使用以下代码将Class
定义为Observable
和Observer
似乎没问题:
public class Data extends Observable implements Observer
然而,试图实现它,它不起作用。
public class Data extends Observable implements Observer {
@Override
public void update(Observable o, Object o1) {
System.out.println("SC");
}
Integer A;
String B;
Float C;
public Data() {
this.addObserver(this);
}
public void setA(Integer A) {
this.A = A;
notifyObservers();
}
public void setB(String B) {
this.B = B;
notifyObservers();
}
public void setC(Float C) {
this.C = C;
notifyObservers(this.C);
}
}
使用main
函数,如下所示:
public static void main(String[] args) {
Data d = new Data();
d.setA(5);
d.setB("Hi");
d.setC(2.0f);
}
它应该打印一些“SC”但它不起作用。谁能描述为什么?
答案 0 :(得分:6)
如果您没有.setChanged()
,则.notifyObservers()
无效。如果您有单独的类定义Observable和Observers,或者如果您有一个类,就像在您的示例中一样。
尝试更改您的setter,如下所示:
public void setC(Float C) {
this.C = C;
setChanged(); // <-- add this line
notifyObservers(this.C);
}
来自 Observable
的文档,
setChanged()
将此Observable对象标记为已更改;hasChanged
方法现在将返回true
。
notifyObservers(Object arg)
如果此对象已更改,如hasChanged
方法所示,则通知其所有观察者,然后调用clearChanged
方法指示该对象已不再更改。