2017-02-10 5 views
4

nullを格納できるSimpleIntegerPropertyがあります。しかし、これはIntegerPropertyのJavadocの書かれたように、不可能である。JavaFX:SimpleIntegerPropertyにnullを格納する

注:null値にこのプロパティを設定または結合「0.0」にプロパティを設定します。 setValue(java.lang.Number)を参照してください。

これはまた、このようなLongPropertyFloatPropertyDoublePropertyのような他の特性に適用され、BooleanProperty(ではないStringPropertyに、nullを可能にします!)。これはなぜですか?これらのプロパティにnullを格納するための回避策はありますか?

+0

プリミティブラッパータイプ、 'IntegerProperty'、' DoubleProperty'などは、あることを可能とすることを回避することができますまさしくそれを意図しています:プリミティブ型のための観測可能なラッパー。だから 'IntegerProperty'は' int'をラップすることを意図しています。もちろん 'null'値をとることはできません。便宜上、 'IntegerProperty'は' Property 'を実装しているので、' setValue(Number) 'メソッドを継承します。しかし、値を 'null 'に設定するのに使われることは意図されていません(そして、あなたが観察したように、値をデフォルトの' 0'に設定するために文書化されています)。 'null'を取るこ​​とができるobservableを望むなら、' ObjectProperty 'を使います。 –

答えて

4

IntegerProperty.setValue(java.lang.Number)メソッドは、WriteableIntegerValueWriteableValueのインターフェイスで指定されています。 WriteableIntegerValueのJavadocは、状態:

注:このメソッドは代わりに "0" を設定し、例外がスローされることなく、nullを受け入れる必要があります。

あなたがIntegerPropertyBaseクラスのコードを見ている場合は、値が実際に(which never can be nullintプリミティブとして格納されていることがわかります。これは、SimpleIntegerPropertyのJavaFXのAPIで指定されています。

このクラスは、int値をラップするプロパティの完全な実装を提供します。

ソリューション: あなたは単にSimpleObjectProperty<Integer>の代わりSimpleIntegerPropertyを、使用してSimpleObjectPropertynull

関連する問題