班级里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 属性与原始类型属性对齐,例如BooleanProperty
or 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 中打开源代码并查看。