В чем разница между set(String) и setValue(String) в классе SimpleStringProperty?
Я знаю, что set(String) получен из StringPropertyBase, но это еще больше удивляет, почему есть setValue(String)
Ответ 1
set/setValue и get/getValue существуют пары методов для выравнивания свойств объекта с такими свойствами примитивных типов, как BooleanProperty или DoubleProperty:
В этих классах свойств методы ___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 и видеть это.