[英]JavaFX: Binding and weak listener
请注意,JavaFX具有通过弱侦听器实现的所有绑定调用。 这意味着可以对垃圾属性进行垃圾收集,并阻止其更新。
现在考虑拥有两个属性, ObjectProperty<Foo> shortLived
位于ShortLivedObject
ObjectProperty<Foo> longLived
和位于ShortLivedObject
ObjectProperty<Foo> longLived
LongLivedObject
。
我这样绑定它们:
longLivedObject.longLivedProperty().bind(shortLivedObject.shortLivedProperty());
因为绑定使用弱监听器,所以如果将shortLivedObject
进行垃圾回收, shortLived
属性进行垃圾回收。 那么,这是否意味着longLived
属性仍然被绑定,但是它永远不会被更新? 这是否会使longLived
属性处于绑定状态(使进一步的绑定成为不可能),但是什么也不做呢?
那么,这是否意味着longLived属性仍然被绑定,但是它永远不会被更新?
假设shortLivedProperty
已被垃圾回收, shortLivedProperty
将永远不会再次失效。 结果,将不再调用longLived
的侦听器并对其进行更新。
这是否会使longLived属性处于绑定状态(使进一步的绑定成为不可能),但是什么也不做呢?
无论绑定状态如何,您都应该始终能够bind
属性bind
到新的可观察对象,因为旧的可观察属性将为您删除/取消绑定:
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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.