Java Vaadin复选框对象变为空
我有一个瓦丁物体:Java Vaadin复选框对象变为空,java,vaadin,Java,Vaadin,我有一个瓦丁物体: CheckBox mycb = new CheckBox("caption"); 稍后,此复选框的值将从数据库中更新,如下所示: mycb.setValue(dbvalue); dbvalue在数据库中实际上为空mycb在此行之前为非null,在此行之后为null。它的值不应该保持不变,只返回null吗 此外,尝试通过短路评估避免NullPointerException: if (mycb != null && mycb.getValue() == tru
CheckBox mycb = new CheckBox("caption");
稍后,此复选框的值将从数据库中更新,如下所示:
mycb.setValue(dbvalue);
dbvalue
在数据库中实际上为空mycb
在此行之前为非null,在此行之后为null。它的值不应该保持不变,只返回null吗
此外,尝试通过短路评估避免NullPointerException:
if (mycb != null && mycb.getValue() == true)
...
这无论如何都会产生一个NullPointerException。这是正常的行为还是我做错了什么?你说自己的mycb实际上没有变为空。太好了
if (mycb != null && mycb.getValue() == true)
这会抛出一个NullPointerException
,因为Java试图将mycb.getValue()
的结果强制转换为boolean
。但是因为mycb.getValue()
返回null
,所以它抛出NullPointerException
将其更改为:
if (mycb.getValue() != null && mycb.getValue() == true)
或者类似的事情你说自己的mycb实际上并没有变为空。太好了
if (mycb != null && mycb.getValue() == true)
这会抛出一个NullPointerException
,因为Java试图将mycb.getValue()
的结果强制转换为boolean
。但是因为mycb.getValue()
返回null
,所以它抛出NullPointerException
将其更改为:
if (mycb.getValue() != null && mycb.getValue() == true)
或者类似的调用setValue后,mycb变为null的唯一方法是,如果该方法以某种方式(向下)访问相同的mycb变量。可能有某个事件侦听器侦听语句mycb=null?mycb是局部变量吗?您是否向mycb添加了任何侦听器,尤其是ValueChangeListener?@Davidenhove,mycb是一个字段,我尝试了“private”和“final”,结果是相同的。@kukis,是的,如果字段是final,则有一个侦听器会使用.getValue()检查其值,在成功地对其调用方法之后,它完全不可能为null。您确定在方法调用之后mycb==null吗?如果是这样,请说明您是如何验证它的。调用setValue后,mycb变为null的唯一方法是该方法是否以某种方式(向下)访问相同的mycb变量。可能有某个事件侦听器侦听语句mycb=null?mycb是局部变量吗?您是否向mycb添加了任何侦听器,尤其是ValueChangeListener?@Davidenhove,mycb是一个字段,我尝试了“private”和“final”,结果是相同的。@kukis,是的,如果字段是final,则有一个侦听器会使用.getValue()检查其值,在成功地对其调用方法之后,它完全不可能为null。您确定在方法调用之后mycb==null吗?如果是,请说明您是如何验证它的工作原理的。结论:它最终与Vaadin无关,在Java中只是执行“Boolean b=null;if(b);”得到一个NPE;)它起作用了。结论:它最终与Vaadin无关,在Java中只是执行“Boolean b=null;if(b);”得到一个NPE;)