web-dev-qa-db-ja.com

SimpleStringProperty set()とsetValue()

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

set(String)StringPropertyBase から派生していることは知っていますが、これはさらに不思議に思います。なぜさらにsetValue(String)があるのですか?

20
stefan.at.wpf

_set/setValue_メソッドと_get/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は追加のロジックが組み込まれている可能性があるため、バインディングのニーズに任せることをお勧めします。

Object/Stringプロパティの場合、setメソッドとsetValueメソッドの間に違いはありません。

32
Sergey Grinev

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からソースを開いて、それを確認できます。

10
Alexander Kirov