SimpleStringProperty set() vs. setValue()

2019-03-17 17:57发布

What is the difference between set(String) and setValue(String) in the SimpleStringProperty class?

I know that set(String) is derived from StringPropertyBase, but this makes me even more wonder, why there additionally is setValue(String)?

2条回答
来,给爷笑一个
2楼-- · 2019-03-17 18:58

set/setValue and get/getValue methods pairs exist to align Object properties with primitive types properties like BooleanProperty or DoubleProperty:

BooleanProperty:

void set(boolean value)
void setValue(java.lang.Boolean v)

DoubleProperty:

void set(double value)
void setValue(java.lang.Number v)

In these property classes ___Value methods work with corresponding to type objects while direct methods work with primitive types.

Looking in the code you may find a bit of a difference in the logic. For example, DoubleProperty#setValue(null) is equal to DoubleProperty#set(0.0) (which was required by binding). So generally I'd advise to use set/get methods and leave setValue/getValue to binding needs as they may incorporate additional logic.

For Object/String properties there is no difference between set and setValue methods.

查看更多
爷的心禁止访问
3楼-- · 2019-03-17 19:00

StringProperty.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();
    }
}

In common case, you can open sources from open javafx and see that.

查看更多
登录 后发表回答