5

Class从技术上讲,将 a 定义为 bothObservableObserver使用以下代码似乎可以:

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”,但它不工作。谁能描述为什么?

4

1 回答 1

6

如果不这样做.setChanged(),则.notifyObservers()没有效果。如果您有单独的定义 Observable 和 Observers 的类,或者您有一个单独的类,例如在您的示例中,就会出现这种情况。

尝试如下更改您的设置器:

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方法以指示该对象不再发生变化。

于 2012-10-17T11:09:26.567 回答