班级里set(String)和班里有什么区别?setValue(String)SimpleStringProperty
我知道set(String)是从 派生的StringPropertyBase,但这让我更加疑惑,为什么还有setValue(String)?
班级里set(String)和班里有什么区别?setValue(String)SimpleStringProperty
我知道set(String)是从 派生的StringPropertyBase,但这让我更加疑惑,为什么还有setValue(String)?
set/setValue和get/getValue方法对存在用于将 Object 属性与原始类型属性对齐,例如BooleanPropertyor DoubleProperty:
布尔属性:
void set(boolean value)
void setValue(java.lang.Boolean v)
双属性:
void set(double value)
void setValue(java.lang.Number v)
在这些属性类___Value中,方法使用对应于类型对象,而直接方法使用原始类型。
查看代码,您可能会发现逻辑有所不同。例如,DoubleProperty#setValue(null)等于DoubleProperty#set(0.0)(绑定需要)。所以通常我建议使用 set/get 方法并将 setValue/getValue 留给绑定需求,因为它们可能包含额外的逻辑。
对于 Object/String 属性,set 和 setValue 方法之间没有区别。
字符串属性.java:
@Override
public void setValue(String v) {
set(v);
}
StringPropertyBase.java:
@Override
public void set(String newValue) {
if (isBound()) {
throw new java.lang.RuntimeException("A bound value cannot be set.");
}
if ((value == null)? newValue != null : !value.equals(newValue)) {
value = newValue;
markInvalid();
}
}
通常情况下,您可以从 open javafx 中打开源代码并查看。