10類中的set(String)
和setValue(String)
有什麼區別?SimpleStringProperty set()vs setValue()
我知道set(String)
是從StringPropertyBase
衍生出來的,但是這讓我更加想知道,爲什麼還有setValue(String)
?
10類中的set(String)
和setValue(String)
有什麼區別?SimpleStringProperty set()vs setValue()
我知道set(String)
是從StringPropertyBase
衍生出來的,但是這讓我更加想知道,爲什麼還有setValue(String)
?
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留給綁定需求,因爲它們可能包含額外的邏輯。
對於對象/字符串屬性,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的來源和看到。
謝謝,也是@tarrsalah,但我還不明白這是什麼意思? – 2013-04-26 12:02:25
「有什麼區別」 - 沒有區別。其中一個叫另一個。 – 2013-04-26 12:06:24
那麼爲什麼StringProperty會添加'setValue()'方法?僅出於語義原因? – 2013-04-26 12:17:49
從我所看到的,一個來自'WritableValue',另一個來自'WritableObjectValue'。爲什麼這兩個接口存在是一個謎。可能只是一個設計缺陷。 – 2013-04-26 11:29:08