Текущее значение сохраняется в классе помощника, который используется для обработки события, см. com.sun.javafx.binding.ExpressionHelper
.Например, если вы посмотрите на конкретную реализацию в статическом внутреннем классе SingleChange
:
private T currentValue;
...
@Override
protected void fireValueChangedEvent() {
final T oldValue = currentValue;
currentValue = observable.getValue();
...
listener.changed(observable, oldValue, currentValue);
...
}
Generic
, другой класс для обработки событий изменения имеет аналогичную реализацию.
Добавление прослушивателей приводит к созданию ExpressionHelper
экземпляра (или модификации существующего), и этот этот объект отвечает за вызов обработчиков событий.(ExpressionHandler
хранится в поле объекта свойства, в данном случае в поле ReadOnlyStringPropertyBase
helper
.)