ReadOnlyStringWrapper.ReadOnlyPropertyImpl从哪里获取来自ChangeListener的oldValue()

书史足自悦,安用勤与劬。这篇文章主要讲述ReadOnlyStringWrapper.ReadOnlyPropertyImpl从哪里获取来自ChangeListener的oldValue?相关的知识,希望能为你提供帮助。
我正在研究javaFX11的ReadOnlyStringWrapper.ReadOnlyPropertyImpl类:

private class ReadOnlyPropertyImpl extends ReadOnlyStringPropertyBase {@Override public String get() { return ReadOnlyStringWrapper.this.get(); }@Override public Object getBean() { return ReadOnlyStringWrapper.this.getBean(); }@Override public String getName() { return ReadOnlyStringWrapper.this.getName(); } };

ReadOnlyPropertyImpl的实例返回给客户端,可以在read only模式下使用它。我无法理解的是ReadOnlyPropertyImpl将把oldValue带到ChangeListener。正如我们所看到的,它只覆盖当前值的get方法,它取自包装器。谁能解释一下?
答案当前值存储在用于事件处理的帮助程序类中,请参阅com.sun.javafx.binding.ExpressionHelper。例如。如果你看一下SingleChange静态内部类中的具体实现:
private T currentValue; ...@Override protected void fireValueChangedEvent() { final T oldValue = https://www.songbingjia.com/android/currentValue; currentValue = observable.getValue(); ... listener.changed(observable, oldValue, currentValue); ... }

【ReadOnlyStringWrapper.ReadOnlyPropertyImpl从哪里获取来自ChangeListener的oldValue()】Generic,处理变更事件的另一个类有类似的实现。
添加侦听器会导致创建ExpressionHelper实例(或修改现有实例),并且此对象负责调用事件处理程序。 (ExpressionHandler存储在属性对象的字段中,在本例中为ReadOnlyStringPropertyBasehelper字段。)

    推荐阅读