让我们说,我有两个StringProperty
个对象,我会绑定。我希望绑定变弱,即当其中一个对象引用变为null时,垃圾收集器可以将其从内存中删除。
实施例
StringProperty obj1=new StringProperty("Object1");
StringProperty obj2=new StringProperty("Object2");
obj2.bind(obj1);
obj2=null;
虽然失去原始引用的obj2
现在在绑定中被引用。所以,我需要一个弱引用,所以我不必先使用unbind。
重要提示:我不想使用unbind。
我可以创建一个弱绑定吗?
答案 0 :(得分:7)
虽然是晚了,但我在Property.bind(...)
JavaDoc中找到了这个代码段:
请注意,JavaFX具有通过弱侦听器实现的所有绑定调用。这意味着绑定属性可以被垃圾收集并停止更新。
因此,默认情况下,您的绑定应保持弱引用。
答案 1 :(得分:0)
如果您通过property1.bindBidirectional(property2)
或obj2.bindBidirectional(obj1)
使用BidirectionalBinding,则会使用使用com.sun.javafx.binding.BidirectionalBinding
实现的WeakReference
创建此绑定。
如果这是您正在搜索的内容,则按预期工作。如果你只是"只有"对单向绑定感兴趣,您可以继续上述类的源代码,复制其绑定实现并根据您的需要进行定制。
答案 2 :(得分:-1)
为什么不创建自定义字符串绑定。然后,您可以在激活绑定时自己处理null-case。