SimpleStringProperty set()与setValue()

ste*_*wpf 20 java javabeans javafx-2

之间有什么区别set(String),并setValue(String)SimpleStringProperty上课吗?

我知道这set(String)是源于StringPropertyBase,但这让我更加惊讶,为什么还有setValue(String)呢?

Ser*_*nev 32

set/setValueget/getValue方法对存在将Object属性与基本类型属性对齐,如:BooleanPropertyDoubleProperty:

BooleanProperty:

void set(boolean value)
void setValue(java.lang.Boolean v)
Run Code Online (Sandbox Code Playgroud)

DoubleProperty:

void set(double value)
void setValue(java.lang.Number v)
Run Code Online (Sandbox Code Playgroud)

在这些属性类中,___Value方法使用对应于类型对象,而直接方法使用基本类型.

查看代码,您可能会发现逻辑上有点不同.例如,DoubleProperty#setValue(null)等于DoubleProperty#set(0.0)(绑定所需).所以我建议使用set/get方法并将setValue/getValue留给绑定需求,因为它们可能包含额外的逻辑.

对于Object/String属性,set和setValue方法之间没有区别.

  • 这是您可以获得的最佳解释,区别仅仅是"API"设计者的命名约定. (2认同)

Ale*_*rov 10

StringProperty.java:

@Override
public void setValue(String v) {
    set(v);
}
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

通常情况下,您可以从打开的javafx打开源代码并查看.

  • 由于接口的实现.接口系统以某种方式构建,因此您需要2个接口,允许您设置值.并且没有名称冲突,有不同的名称.其中一个set/get来自一个接口,以及setValue/getValue (3认同)