JavaFX:在SimpleIntegerProperty中存储null

时间:2017-02-10 13:40:15

标签: java javafx null primitive

我有一个SimpleIntegerProperty应该可以存储null。但是,这是不可能的,如IntegerProperty的JavaDoc中所写:

  

注意:将此属性设置或绑定到null值会将属性设置为“0.0”。请参阅setValue(java.lang.Number)

这也适用于其他属性,例如LongPropertyFloatPropertyDoublePropertyBooleanProperty(但不适用于StringProperty,这允许{{ 1}}!)。为什么会这样?是否有解决方法将null存储在这些属性中?

1 个答案:

答案 0 :(得分:4)

IntegerProperty.setValue(java.lang.Number)方法在接口WriteableIntegerValueWriteableValue中指定。 WriteableIntegerValue的JavaDoc声明:

  

注意:此方法应接受null而不抛出异常,而是设置为“0”。

如果您正在查看IntegerPropertyBase类的代码,您还可以看到该值实际存储为基元intwhich never can be null)。这也在SimpleIntegerProperty的JavaFX API中指定:

  

此类提供包含 int 值的Property的完整实现。

<强>解决方案: 您可以使用SimpleObjectProperty<Integer>代替SimpleIntegerProperty来避免这种情况,因为SimpleObjectProperty允许null