我可以在JavaFX中创建弱绑定吗?

时间:2014-05-14 08:31:45

标签: binding javafx weak-references

让我们说,我有两个StringProperty个对象,我会绑定。我希望绑定变弱,即当其中一个对象引用变为null时,垃圾收集器可以将其从内存中删除。

实施例

StringProperty obj1=new StringProperty("Object1");
StringProperty obj2=new StringProperty("Object2"); 
obj2.bind(obj1);
obj2=null;

虽然失去原始引用的obj2现在在绑定中被引用。所以,我需要一个弱引用,所以我不必先使用unbind。

重要提示:我不想使用unbind。

我可以创建一个弱绑定吗?

3 个答案:

答案 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。