InvalidationListener和ChangeListener之间的区别是什么?

时间:2017-06-20 00:51:54

标签: java javafx javafx-8 observable

如您所知,java中的ObservableValue可以生成两种类型的事件:InvalidationChange。我不知道它们之间的区别是什么?

何时应该使用Invalidation或Change Listener?

1 个答案:

答案 0 :(得分:2)

根据文件:

  

ObservableValue生成两种类型的事件:更改事件和失效事件。更改事件表示值已更改。如果当前值不再有效,则会生成失效事件。如果ObservableValue支持延迟评估,则此区别变得很重要,因为对于延迟评估的值,人们不知道无效值是否确实已更改,直到它重新计算。出于这个原因,生成更改事件需要急切的评估,同时可以为急切和懒惰的实现生成失效事件。

即使可观察值支持延迟评估,ChangeListener也会执行急切计算。

如果要查找在observe属性中发生的更改,请使用更改侦听器。由于InvalidationListener只能帮助我们知道发生了一些变化,如果您想知道旧值和新值之间的差异,您必须自己计算或者只是使用更改侦听器。