SimpleStringProperty
クラスのset(String)
とsetValue(String)
の違いは何ですか?
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は追加のロジックが組み込まれている可能性があるため、バインディングのニーズに任せることをお勧めします。
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();
}
}
一般的なケースでは、open javafxからソースを開いて、それを確認できます。