【发布时间】:2012-12-16 12:35:46
【问题描述】:
我有一个实现观察者的类,当然需要有更新功能:
public void update(Observable obs, Object obj);
谁能解释一下这两个参数代表什么? Observable 当然是我的 observable,但是,我如何通过这个 Observable obs 对象访问我的 observable 字段? 什么是Object obj?
【问题讨论】:
标签: java
我有一个实现观察者的类,当然需要有更新功能:
public void update(Observable obs, Object obj);
谁能解释一下这两个参数代表什么? Observable 当然是我的 observable,但是,我如何通过这个 Observable obs 对象访问我的 observable 字段? 什么是Object obj?
【问题讨论】:
标签: java
如果其他人在弄清楚如何发送第二个参数时遇到困难,正如 Nick 指出的那样:在 notifyObservers 方法调用中。
在 Observable 中:
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);
}
}
}
【讨论】:
obs 是扩展Observable 并具有notifyObservers 方法的对象。您可以将obs 转换为扩展Observable 的对象,然后调用您需要的方法。
obj 是可选参数,可以传递给notifyObservers。
【讨论】:
instanceof 运算符来检查 obs 的类型。
观察者的update(Observable obs,Object obj)方法通过notifyObservers接收到(Observable中)发生变化的对象(第二个参数)。
【讨论】: