gpt4 book ai didi

java - 将一个类定义为 Observable 和 Observer 两者

转载 作者:搜寻专家 更新时间:2023-11-01 02:13:17 24 4
gpt4 key购买 nike

从技术上讲,使用以下代码将 Class 定义为 ObservableObserver 似乎没问题:

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”,但它不工作。任何人都可以描述为什么吗?

最佳答案

如果您不使用 .setChanged(),则 .notifyObservers() 无效。如果您有单独的类定义 Observable 和 Observers,或者如果您只有一个类,如您的示例,则属于这种情况。

尝试按如下方式更改您的 setter :

public void setC(Float C) {
this.C = C;
setChanged(); // <-- add this line
notifyObservers(this.C);
}

来自的文档Observable ,

setChanged() Marks this Observable object as having been changed; the hasChanged method will now return true.

notifyObservers(Object arg) If this object has changed, as indicated by the hasChanged method, then notify all of its observers and then call the clearChanged method to indicate that this object has no longer changed.

关于java - 将一个类定义为 Observable 和 Observer 两者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12932945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com