SimpleStringProperty set()与setValue()

SimpleStringProperty类中set(String)setValue(String)之间有什么区别?

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

set/setValueget/getValue方法对用于将Object属性与原始类型属性(如BooleanPropertyDoubleProperty

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

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打开源代码并查看。