我有以下代码
private Long projectNumber; // with getters and setters
当我检查projectNumber
是否为null时,我在if条件下得到空指针异常
if(selected.getProjectNumber()!=null){
// do something
}
即使Long是一个包装类,可能是什么原因。
如果我将projectNumber从Long更改为String,它可以正常工作。
更新1
private Project selected = new Project();
public Project getSelected() {
return selected;
}
public void setSelected(Project selected) {
this.selected = selected;
}
我在以下方法
中获取JSF的ManagedBean中的选定值public void onRowSelect(SelectEvent event) {
}
projectNo getters and setters
public Long getProjectNo() {
return projectNo;
}
public void setProjectNo(Long projectNo) {
this.projectNo = projectNo;
}
答案 0 :(得分:4)
您遇到的问题是因为selected
为空,projectNumber
。将支票更改为:
if(selected != null && selected.getProjectNumber()!=null){
// do something
}
或者为上面的selected
添加单独的支票。
答案 1 :(得分:2)
如果你在这里获得NPE:
if(selected.getProjectNumber()!=null){
并且所有getProjectNumber()
都是return projectNumber
,这强烈表明 selected
为null
。
答案 2 :(得分:1)
根据您发布的内容,我们发现问题是selected
变量引用的对象是null
。你也必须检查一下:
if(selected !=null && selected.getProjectNumber()!=null){
// do something
}
说明:这样做,因为布尔AND(和OR)运算符只评估左边条件,如果它是假的,没有触及右边,你就不会得到{ {1}}。
编辑正如OP提到的那样,通过将变量更改为NullPointerExceptyion
没有遇到问题,正如0xCAFEBABE的建议所暗示的那样,如果getter返回(或者内部以某种方式),也可能出现相同的错误使用)一个简单的String
值而不是long
个对象,变量的值为Long
:
null
答案 3 :(得分:1)
问题是selected
为空。检查如下:
if(selected != null && selected.getProjectNumber()!=null){
// do something
} else {
// here: selected = null OR projectNumber of selected is null
}
答案 4 :(得分:1)
您是否检查selected
是null
您可以执行以下操作
if(null != selected)
{
if(null != selected.getProjectNumber())
{
// do something
}
}
答案 5 :(得分:1)
您选择的对象显然为null,请尝试执行以下操作:
if ((selected != null) && (selected.getProjectNumber()!=null)){
// do something
}