20

班级里set(String)和班里有什么区别?setValue(String)SimpleStringProperty

我知道set(String)是从 派生的StringPropertyBase,但这让我更加疑惑,为什么还有setValue(String)

4

2 回答 2

32

set/setValueget/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 方法之间没有区别。

于 2013-04-26T12:32:48.173 回答
10

字符串属性.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 中打开源代码并查看。

于 2013-04-26T11:55:02.527 回答