我正在研究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 = currentValue;
currentValue = observable.getValue();
...
listener.changed(observable, oldValue, currentValue);
...
}
Generic
,用于处理变更事件的另一个类具有类似的实现。添加侦听器会导致创建
ExpressionHelper
实例(或修改现有实例),并且此对象负责调用事件处理程序。 (ExpressionHandler
存储在属性对象的字段中,在这种情况下,存储在ReadOnlyStringPropertyBase
的helper
字段中。)关于java - ReadOnlyStringWrapper.ReadOnlyPropertyImpl从哪里获取ChangeListener的oldValue?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54386648/