2013-04-26 62 views
16

10類中的set(String)setValue(String)有什麼區別?SimpleStringProperty set()vs setValue()

我知道set(String)是從StringPropertyBase衍生出來的,但是這讓我更加想知道,爲什麼還有setValue(String)

+0

從我所看到的,一個來自'WritableValue',另一個來自'WritableObjectValue'。爲什麼這兩個接口存在是一個謎。可能只是一個設計缺陷。 – 2013-04-26 11:29:08

回答

23

set/setValueget/getValue方法對存在於對準原始類型屬性對象屬性等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留給綁定需求,因爲它們可能包含額外的邏輯。

對於對象/字符串屬性,set和setValue方法之間沒有區別。

+2

這是您可以得到的最好解釋,區別僅僅是'API'設計者的命名約定。 – tarrsalah 2013-04-26 12:34:30

+0

我喜歡所有的答案,他們都幫助,但這一個得到了我最有趣的細節。感謝:-) – 2013-04-26 15:21:44

+0

我認爲這讓我感到困惑,直到現在。因爲setValue()應該像其他java標準類所具有的原始類型一樣。的intValue。等等 – UnKnown 2016-06-16 21:19:08

6

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的來源和看到。

+1

謝謝,也是@tarrsalah,但我還不明白這是什麼意思? – 2013-04-26 12:02:25

+1

「有什麼區別」 - 沒有區別。其中一個叫另一個。 – 2013-04-26 12:06:24

+1

那麼爲什麼StringProperty會添加'setValue()'方法?僅出於語義原因? – 2013-04-26 12:17:49