类是可观察的,并实现观察者,但不触发最后一个元素



我有3个类,Manager,MessageObserver,WidgetObserver

  • 管理器是一个可观察的类。
  • MessageObserver 既是 Observer (for Manager(,也是 Observable。
  • WidgetObserver 是一个观察者(用于 MessageObserver(。

当我调用testManager((时,我得到MessageObserver中的update((方法来触发,但是MessageObserver内部的notifyObservers((方法不会触发WidgetObserver中的update((方法。

public Manager extends Observable
{
    private ArrayList<Observer> observers = new ArrayList<>();
    public Manager()
    {
        // Set local variables
    }
    public void addObserver(Observer o)
    {
        observers.add(o);
    }
    public void newMessage(String a1, String a2)
    {
        this.a1 = a1;
        this.a2 = a2;
        setChanged();
        notifyObservers();
    }
}
public MessageObserver extends Observable implements Observer
{
    private ArrayList<Observer> observers = new ArrayList<>();
    public MessageObserver(Manager aManager)
    {
        mManager = aManager;
        mManager.addObserver(this);
        // set local variables from mManager.getValues()
    }
    public void update(Observable obj, Object arg)
    { 
        System.out.println("Triggered MessageObserver");
        ...
        setChanged();
        notifyObservers();
    }
}
public WidgetObserver implements Initializable, Observer
{
    public WidgetObserver()
    {
        mManager= new Manager();
        mMessageObserver = new MessageObserver(mManager);
        mMessageObserver.addObserver(this);
    }
    public void initialize()
    {
        // Establish local variables
        testManager();
    }
    private void testManager()
    {
        mManager.newMessage(...);
    }
    public void update(Observable obj, Object arg)
    {
         System.out.println("WIDGET TRIGGERED");
         // Add value to local array
    }
}
一个

猜测是观察者列表为空,所以请检查您是否注册了不同于可观察 Observer.In 代码观察器列表。

可观察逻辑

 if (!changed)
                return;
            arrLocal = obs.toArray();
            clearChanged();
        }
        for (int i = arrLocal.length-1; i>=0; i--)
            ((Observer)arrLocal[i]).update(this, arg);

相关内容

最新更新