我有一个SimpleIntegerProperty
应该可以存储null
。但是,这是不可能的,如IntegerProperty的JavaDoc中所写:
注意:将此属性设置或绑定到
null
值会将属性设置为“0.0”。请参阅setValue(java.lang.Number)
。
这也适用于其他属性,例如LongProperty
,FloatProperty
,DoubleProperty
和BooleanProperty
(但不适用于StringProperty
,这允许{{ 1}}!)。为什么会这样?是否有解决方法将null
存储在这些属性中?
答案 0 :(得分:4)
IntegerProperty.setValue(java.lang.Number)
方法在接口WriteableIntegerValue和WriteableValue中指定。 WriteableIntegerValue的JavaDoc声明:
注意:此方法应接受
null
而不抛出异常,而是设置为“0”。
如果您正在查看IntegerPropertyBase
类的代码,您还可以看到该值实际存储为基元int
(which never can be null
)。这也在SimpleIntegerProperty的JavaFX API中指定:
此类提供包含
int
值的Property的完整实现。
<强>解决方案强>:
您可以使用SimpleObjectProperty<Integer>
代替SimpleIntegerProperty
来避免这种情况,因为SimpleObjectProperty
允许null
值