gpt4 book ai didi

java - 使用 notifyObservers() 进行观察者通知的顺序

转载 作者:行者123 更新时间:2023-12-05 00:15:15 27 4
gpt4 key购买 nike

我有以下代码:

public class MyObservable extends Observable {
// ...
public void doSomething() {
// do stuff
setChanged();
notifyObservers();
}
}

public class A implements Observer {
public void update(Observable o, Object arg) {
// do something
}
}

public class B implements Observer {
public void update(Observable o, Object arg) {
// do something
}
}

和主要功能:
public static void main(String[] args) {
MyOvervable a = new MyObservable();
a.addObserver(new A());
a.addOberser(new B());
a.doSomething();
}

notifyObservers() 调用更新函数的顺序与我用 addObserver() 添加观察者的顺序相同?

最佳答案

Observable 的 Javadoc 说通知是按照监听器注册的顺序进行的,但是这是不正确的 - 通知实际上是按照相反的顺序进行的。

带有解释性注释的代码摘录:

// addObserver() adds last-most at end of the list
public synchronized void addObserver(Observer o) {
..
obs.addElement(o);
}

public void notifyObservers(Object arg) {
..
// notifyObservers iterates backwards; last-most first.
for (int i = arrLocal.length-1; i>=0; i--)
((Observer)arrLocal[i]).update(this, arg);
}

我提交了一个错误报告 -- https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8214760 -- 然而,由于 Observable 被弃用,它已被关闭,因为“不会修复”。

我的信念是,所实现的行为是稳定的,不会改变;更改顺序可能会破坏许多使用它的应用程序的兼容性。

关于java - 使用 notifyObservers() 进行观察者通知的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45053784/

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