SimpleStringProperty set() vto setValue() - программирование
Подтвердить что ты не робот

SimpleStringProperty set() vto setValue()

В чем разница между set(String) и setValue(String) в классе SimpleStringProperty?

Я знаю, что set(String) получен из StringPropertyBase, но это еще больше удивляет, почему есть setValue(String)

4b9b3361

Ответ 1

set/setValue и get/getValue существуют пары методов для выравнивания свойств объекта с такими свойствами примитивных типов, как BooleanProperty или DoubleProperty:

BooleanProperty:

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

DoubleProperty:

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.

Ответ 2

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

В общем случае вы можете открывать источники из открытого javafx и видеть это.