JavaFX:在 SimpleIntegerProperty 中存储 null

use*_*698 8 java null primitive javafx

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

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

这也适用于其他属性,如LongPropertyFloatPropertyDoubleProperty,和BooleanProperty(而不是StringProperty,它允许null!)。为什么会这样?是否有解决方法可以存储null在这些属性中?

use*_*698 9

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

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

如果您正在查看IntegerPropertyBase类的代码,您还可以看到该值实际上存储为原始类型int永远不能是null)。这也在SimpleIntegerProperty的 JavaFX API 中指定

此类提供包装int值的属性的完整实现。

解决方案:您可以简单地通过使用 aSimpleObjectProperty<Integer>而不是a来规避它SimpleIntegerProperty,因为 aSimpleObjectProperty允许null