我有一个表单,想要插入整数数据。这是POJO:
IntNumberData.class
...
private final IntegerProperty num;
public IntNumberData() {
this(null);
}
public IntNumberData(Integer num) {
this.num = new SimpleIntegerProperty(num);
}
public Integer getNum() {
return num.get();
}
public void setNum(Integer num) {
this.num.set(num);
}
public IntegerProperty numProperty() {
return num;
}
...
还创建了其他类,当我试图添加数据时,我得到消息:
由:java.lang.NullPointerException引起在net.websimp.numdata.controller. intnumberdataconcontroller . handlenewnum (intnumberdataconcontroller .java:35)
我测试了所有的引用,但是当将Integer类型更改为String工作时。为什么呢?
SimpleIntegerProperty
的构造函数接受int
(即而不是Integer
)。那么构造函数
public IntNumberData(Integer num) {
this.num = new SimpleIntegerProperty(num);
}
隐式地打开num
,即它有效地编译为
public IntNumberData(Integer num) {
this.num = new SimpleIntegerProperty(num.intValue());
}
如果num
是null
,则抛出NullPointerException
。
你可以改成
public IntNumberData(Integer num) {
this.num = new SimpleIntegerProperty();
this.num.setValue(num);
}
,但请注意,如果传入null
,则实现将其设置为0
(参见文档)。
如果你真的想要一个支持空值的Integer
类型的属性,那么你应该使用ObjectProperty<Integer>
而不是IntegerProperty
。
我认为你的错误来自null(我很确定实际上因为我现在测试了)。
运行这段代码看看是否冲突:
Integer n = null;
SimpleIntegerProperty p = new SimpleIntegerProperty(n);`
例如,可以用0来初始化,或者这在您的情况下不适用吗?
使用Optional<R>
,您可以分发选项…看看这个