2013-04-26 17 views
16

Jaka jest różnica między set(String) a setValue(String) w klasie SimpleStringProperty?SimpleStringProperty set() vs. setValue()

Wiem, że set(String) pochodzi od StringPropertyBase, ale to sprawia, że ​​jeszcze bardziej zastanawiam się, dlaczego dodatkowo jest setValue(String)?

+0

Z tego co widzę, jeden pochodzi z "WritableValue", a drugi z "WritableObjectValue". Dlaczego oba interfejsy istnieją, jest tajemnicą. Może być po prostu wadą projektu. –

Odpowiedz

23

set/setValue i get/getValue metody pary w celu dostosowania właściwości obiektu z typów pierwotnych właściwości jak BooleanProperty lub DoubleProperty:

BooleanProperty:

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

DoubleProperty:

void set(double value) 
void setValue(java.lang.Number v) 

w tych klasach właściwości ___Value metody działają zgodnie z obiekty typu, podczas gdy metody bezpośrednie działają z typami pierwotnymi.

Patrząc w kod, możesz zauważyć pewną różnicę w logice. Na przykład DoubleProperty#setValue(null) jest równa DoubleProperty#set(0.0) (co było wymagane przez wiązanie). Tak więc ogólnie radzę używać metod set/get i pozostawić setValue/getValue potrzebom wiążącym, ponieważ mogą one zawierać dodatkową logikę.

Dla właściwości obiektu/łańcucha nie ma różnicy między metodami set i setValue.

+2

To jest najlepsze wytłumaczenie, jakie można uzyskać, różnica jest tylko konwencją nazewniczą dla projektantów 'API'. – tarrsalah

+0

Podobały mi się wszystkie odpowiedzi i wszystkie pomogły, ale ten dostarczył mi najciekawszych szczegółów. Dzięki :-) –

+0

Myślę, że to mylące dla mnie do teraz. Ponieważ funkcja setValue() powinna być dla typu podstawowego, tak jak inne klasy z klasą java. intValue. itp. – UnKnown

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

W przypadku wspólnego, można otworzyć źródła z otwartym JavaFX i zobaczyć. Istnieją

+1

Dzięki, również za @tarrsalah, ale jeszcze nie rozumiem co to znaczy? –

+1

"Jaka jest różnica między" - nie ma różnicy. Jeden z nich dzwoni do drugiego. –

+1

Dlaczego więc StringProperty dodaje metodę 'setValue()'? Tylko ze względów semantycznych? –