2017-06-20 11 views
1

JavaのObservableValueは、InvalidationChangeの2種類のイベントを生成できます。私は彼らの違いは何か分からないのですか?InvalidationListenerとChangeListenerの違いは何ですか?

無効化または変更リスナーを使用する必要があるのはいつですか?ドキュメントを1として

+0

JavaDocsを読むだけで、 'InvalidationListener'サポートは親クラス' Observable'から来ていますが、目的は少し不明ですが、意味は実装に文脈上の意味であると思います。 – MadProgrammer

+0

ただし、[ObservableValueのJavaDocs](https://docs.oracle.com/javase/8/javafx/api/javafx/beans/value/ObservableValue.html)の状態 – MadProgrammer

+0

* "ObservableValueは、次の2種類のObservableValueが遅延評価をサポートしている場合、この区別は重要になります。なぜなら、現在の値が有効でない場合は**無効化イベントが生成されるからです。このような理由から、変更イベントを生成するには熱心な評価が必要ですが、熱心で怠惰な実装では無効化イベントを生成することができます」* – MadProgrammer

答えて

1

:変更イベントと無効化イベント:ObservableValueはイベントの2種類を生成

。変更イベントは、値が変更されたことを示します。現在の値がもう有効でない場合、無効化イベントが生成されます。ObservableValueが遅延評価をサポートしている場合、この区別は重要です。遅延評価された値の場合、無効な値が再計算されるまで実際に変更されたかどうかはわかりません。このため、変更イベントを生成するには熱心な評価が必要ですが、熱心で遅延のある実装では無効化イベントを生成できます。

ChangeListenerは、観測可能な値がレイジー評価をサポートしている場合でも、熱心な計算を強制します。

監視対象のプロパティで発生した変更を検出する場合は、変更リスナーを使用します。 InvalidationListenerは、古い値と新しい値の違いを知りたい場合は、変更が発生したことを知っている場合にのみ、自分で計算するか、単にchange listenerを使用する必要があります。

関連する問題