ReadOnlyStringWrapper.ReadOnlyPropertyImpl从哪里获取来自ChangeListener的oldValue?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 = currentValue;
currentValue = observable.getValue();
...
listener.changed(observable, oldValue, currentValue);
...
}
Generic
,处理变更事件的另一个类有类似的实现。
添加侦听器会导致创建ExpressionHelper
实例(或修改现有实例),并且此对象负责调用事件处理程序。 (ExpressionHandler
存储在属性对象的字段中,在本例中为ReadOnlyStringPropertyBase
的helper
字段。)
以上是关于ReadOnlyStringWrapper.ReadOnlyPropertyImpl从哪里获取来自ChangeListener的oldValue?的主要内容,如果未能解决你的问题,请参考以下文章