【问题标题】:What's the difference between InvalidationListener and ChangeListener?InvalidationListener 和 ChangeListener 有什么区别?
【发布时间】:2017-06-20 00:51:54
【问题描述】:

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

我们什么时候应该使用 Invalidation 或 Change Listener?

【问题讨论】:

  • 什么只是阅读JavaDocs,InvalidationListener支持来自父类Observable,它的目的有点模糊,但我认为这是故意的,因为含义是上下文的实施。
  • "一个ObservableValue产生两种类型的事件:change事件和invalidation事件。change事件表示值已经改变。invalidation事件如果当前值是不再有效。如果 ObservableValue 支持惰性求值,这种区别就变得很重要,因为对于惰性求值的值,在重新计算之前,不知道无效值是否真的发生了变化。因此,生成更改事件需要急切的评估,而失效事件可以为急切和懒惰的实现生成。”
  • 通俗地说,“哎,值被改了”和“哎,发现值无效”是两个不同的事件。

标签: java javafx javafx-8 observable


【解决方案1】:

根据文档:

ObservableValue 生成两种类型的事件:更改事件和失效事件。更改事件指示值已更改。如果当前值不再有效,则生成一个失效事件。如果ObservableValue 支持惰性求值,则这种区别变得很重要,因为对于惰性求值的值,在重新计算之前不知道无效值是否真的发生了变化.出于这个原因,生成更改事件需要急切评估,而无效事件可以为急切和惰性实现生成。

即使可观察值支持惰性求值,ChangeListener 也会强制执行即时计算。

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

【讨论】:

    猜你喜欢
    • 2018-12-29
    • 2020-10-18
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    相关资源
    最近更新 更多