JavaFX - 属性“无效”的含义
Posted
技术标签:
【中文标题】JavaFX - 属性“无效”的含义【英文标题】:JavaFX - meaning of property "invalid" 【发布时间】:2015-03-28 01:57:02 【问题描述】:在 JavaFX 的上下文中,属性在什么意义上在更改时“无效”?我不明白使用这个词的原因。
JavaFX 属性是一个可观察并包装字段值的对象。所以当属性更新或变为无效时,它的侦听器/观察者会收到通知。这是什么意思?
【问题讨论】:
这里是 JavaFX 2 属性和绑定实现的前首席开发人员的blog on changes versus invalidations。 【参考方案1】:我在这里找到了很好的解释。
当调用 intProperty.set(7168) 时,它会触发一个失效事件 到其他财产。收到此失效事件后, otherProperty 只是记下它的值是 no 有效期更长。它不会立即重新计算其 通过查询 intProperty 的值来获取值。重新计算是 稍后在调用 otherProperty.get() 时执行。想象一下,如果 在上面的代码中只调用一次 intProperty.set() 我们调用 intProperty.set() 多次; otherProperty 仍然重新计算其 值只有一次。
经过测试,我找到了这个例子。
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
public class InvalidMean
public static void main(String[] args)
IntegerProperty num1 = new SimpleIntegerProperty(15);
IntegerProperty num2 = new SimpleIntegerProperty(10);
// num2.bind(num1);
// num1.set(56);
System.out.println(num2);
运行这段代码你会得到这个输出:
IntegerProperty [value: 10]
现在从注释行中删除注释。你会得到这个输出。
IntegerProperty [bound, invalid]
num2
的值无效,因为新值到达但尚未更新。正如JavaFX Doc 描述的那样,只是因为懒惰的评估。
JavaFX 绑定和属性实现都支持惰性 评估,这意味着当发生变化时,该值不 立即重新计算。重新计算会在以后发生,如果并且当 随后请求值。
如果您希望该值应该是有效的,请调用num2.getValue();
或num2.get();
在System.out.println(num2);
之前,您将看到属性将是有效的。
注意:在上面的示例中,num2.bind(num1);
和 num1.set(56);
都会使 num2
的值无效,因为 bind 已经更改了 num2
的值,set()
也试图更改该值。
【讨论】:
【参考方案2】:这都是关于惰性评估的。这个video Devoxx 2011 的一次会议对我理解这个概念很有帮助。
对你来说有趣的东西从 ~5:00 开始。
【讨论】:
@UnKnown 找不到视频了,抱歉。 @Spotted 没问题。如果您愿意,我还会添加对此问题的答案,如果我错了,请告诉我。谢谢。以上是关于JavaFX - 属性“无效”的含义的主要内容,如果未能解决你的问题,请参考以下文章
无效的列索引,使用 PreparedStatement 更新