正如您所知,在Java中,ObservableValue 可以生成两种类型的事件:Invalidation 和 Change。那么它们之间有什么区别呢? 我们什么时候应该使用 Invalidation 或者 Change 监听器呢?
根据文档:ObservableValue 生成两种类型的事件:更改事件和无效事件。更改事件表示值已更改。如果当前值不再有效,则会生成无效事件。如果 ObservableValue 支持延迟计算,则此区别变得重要,因为对于延迟计算的值,直到重新计算才知道无效值是否真的已更改。因此,生成更改事件需要急切的评估,而无效事件可以为急切和懒惰的实现生成。ChangeListener 即使可观察值支持延迟计算也强制进行急切计算。如果您想找到已观察属性中发生的更改,可以使用 ChangeListener。而 InvalidationListener 只帮助我们知道有些更改已发生,如果您想知道旧值和新值之间的差异,必须自己计算或简单地使用 ChangeListener。
InvalidationListener
的支持来自于父类Observable
,它的目的有点模糊不清,但我认为这是故意的,因为其含义取决于具体实现的上下文。 - MadProgrammerObservableValue
的 JavaDocs 表明 - MadProgrammerObservableList
...)。 - fabian