请注意,JavaFX通过弱引用监听器实现所有的绑定调用。这意味着绑定属性可以被垃圾回收并停止更新。
现在考虑我有两个属性,ObjectProperty<Foo> shortLived
存在于 ShortLivedObject
,以及 ObjectProperty<Foo> longLived
存在于 LongLivedObject
。
我将它们绑定如下:
longLivedObject.longLivedProperty().bind(shortLivedObject.shortLivedProperty());
由于绑定使用了弱监听器,所以如果
shortLivedObject
被垃圾回收,shortLived
属性也将被垃圾回收。那么,这是否意味着longLived
属性仍然处于绑定状态,但永远不会更新?这是否使得longLived
属性处于绑定状态(使进一步的绑定不可能),但又无任何作用?
longLivedProperty
的监听器,它被用于监听shortLivedObject
的变化,可能会因为采用WeakReference
被垃圾回收。 除非你持有对longLivedProperty
的强引用,这将防止其监听器被垃圾回收。 因此,JavaDoc并没有说shortLivedProperty
将被垃圾回收。那么,你为什么期望shortLivedProperty
被垃圾回收呢? - shaka-b