请注意,JavaFX具有通过weak实现的所有绑定调用 听众。这意味着绑定属性可以被垃圾收集 停止更新。
现在考虑我有两个属性ObjectProperty<Foo> shortLived
驻留在ShortLivedObject
和ObjectProperty<Foo> longLived
驻留在LongLivedObject
。
我这样绑定他们:
longLivedObject.longLivedProperty().bind(shortLivedObject.shortLivedProperty());
因为绑定使用弱侦听器,所以如果shortLivedObject
被垃圾收集,shortLived
属性也会被垃圾收集。那么,这是否意味着longLived
属性仍然受约束,但永远不会更新?是否会使longLived
属性处于绑定状态(无法进一步绑定),但什么都不做?
答案 0 :(得分:0)
那么,这是否意味着longLived属性仍然绑定,但它 永远不会更新?
假设shortLivedProperty
已被垃圾收集,shortLivedProperty
将永远不会再次失效。因此,longLived
的监听器将永远不会再被调用和更新。
是否将longLived属性保留在绑定状态(进一步做法) 绑定不可能),但什么都不做?
无论绑定状态如何,您都应始终bind
属性为 new observable,因为旧的observable属性将被移除/解除绑定:
public void bind(final ObservableValue<? extends T> newObservable) {
if (newObservable == null) {
throw new NullPointerException("Cannot bind to null");
}
if (!newObservable.equals(this.observable)) {
unbind();
observable = newObservable;
if (listener == null) {
listener = new Listener(this);
}
observable.addListener(listener);
markInvalid();
}
}