5

Class技術的には、 aを both として定義し、次のコードを使用して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」が表示されるはずですが、機能していません。誰でも理由を説明できますか?

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 に答える