2013-04-26 6 views
16

SimpleStringPropertyクラスのset(String)setValue(String)の違いは何ですか?SimpleStringProperty setValue()とsetValue()

私はset(String)StringPropertyBaseから派生していることを知っていますが、これによりさらに私にはさらにsetValue(String)があるのでしょうか?

+0

私が見ることができるところから、1つは 'WritableValue'から来て、もう1つは' WritableObjectValue'から来ます。両方のインターフェースが存在する理由は謎です。デザインの欠陥かもしれません。 –

答えて

23

set/setValueget/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メソッドに違いはありません。

+2

これはあなたが得ることができる最良の説明です。違いは 'API'デザイナーの命名規則です。 – tarrsalah

+0

私はすべての答えが好きであり、彼らはすべて助けましたが、これは私のために最も興味深い詳細を得ました。ありがとう:-) –

+0

私はそれが今まで私にとって混乱していると思います。なぜなら、setValue()は他のjava標準クラスhaveのようにプリミティブ型のためでなければならないからです。 intValue。等 – 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(); 
    } 
} 

、あなたが開いたJavaFXからソースを開いて、それを見ることができます。

+1

ありがとう、またあまりにも@tarrsalah、でも私はまだこれが何を意味するのか理解していないのですか? –

+1

"違いは何ですか?" - 違いはありません。そのうちの1人は相手を呼びます。 –

+1

なぜStringPropertyは 'setValue()'メソッドを追加しますか?意味論的な理由からのみ? –