在JavaFX的上下文中,在什么意义上是属性"无效"什么时候改变?我不明白使用这个词的原因。
JavaFX属性是一个可观察的对象并包装字段值。因此,当房产更新或无效时,会通知其listerners /观察员。这是什么意思?
答案 0 :(得分:7)
我在这里找到了很好的解释。
调用intProperty.set(7168)时,会触发无效事件 到其他物业。收到此无效事件后, otherProperty只是简单地说明了它的价值是否定的事实 更长的有效。它不会立即重新计算它 通过查询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
的值无效,因为绑定已经更改了num2
和set()
的值也试图改变价值。
答案 1 :(得分:0)
关于懒惰评估的全部内容。在Devoxx 2011上召开的video会议帮助我理解了这个概念。
有趣的东西从~5:00开始。