4

我有一个实现观察者的类,当然它需要有更新功能:

public void update(Observable obs, Object obj);

有人可以解释一下这两个参数代表什么吗?Observable 当然是我的 observable,但是,我怎样才能通过这个 Observable obs 对象访问我的 observable 字段呢?什么是对象 obj?

4

3 回答 3

7

如果其他人在弄清楚如何发送第二个参数时遇到困难,就像尼克指出的那样:在notifyObservers方法调用中。

在可观察对象中:

private void setLicenseValid(boolean licenseValid) {
    this.licenseValid = licenseValid;
    setChanged();  // update will only get called if this method is called
    notifyObservers(licenseValid);  // add parameter for 2nd param, else leave blank
}

在观察者中:

@Override
public void update(Observable obs, Object arg) {
    if (obs instanceof QlmLicense) {
        setValid((Boolean) arg);
    }
}

确保正确连接您的 Observable,否则您的更新方法将不会被调用。

public class License implements Observer {  
    private static QlmLicense innerlicense; 
    private boolean valid;
    private Observable observable;

    private static QlmLicense getInnerlicense() {
        if (innerlicense == null) {
            innerlicense = new QlmLicense();
            // This is where we call the method to wire up the Observable.
            setObservable(innerlicense);  
        }
        return innerlicense;
    }

    public boolean isValid() {
        return valid;
    }

    private void setValid(Boolean valid) {
        this.valid = valid;
    }

    // This is where we wire up the Observable.
    private void setObservable(Observable observable) {
        this.observable = observable;
        this.observable.addObserver(this);  
    }

    @Override
    public void update(Observable obs, Object arg) {
        if (obs instanceof InnerIDQlmLicense) {
            setValid((Boolean) arg);
        }
    }
}
于 2014-11-12T18:21:29.430 回答
5

obs是扩展Observable并具有notifyObservers方法的对象。您可以obs转换为扩展的对象,Observable然后调用您需要的方法。 obj是可以传递给的可选参数notifyObservers

于 2012-12-16T12:41:11.743 回答
3

观察者的 update(Observable obs,Object obj) 方法通过 notifyObservers 接收发生变化的对象(第二个参数)(在 Observable 中)。

于 2012-12-16T12:42:21.180 回答