0

我有以下代码

private Long projectNumber; // with getters and setters

当我检查是否projectNumber为空时,我在 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) {

}

项目没有 getter 和 setter

public Long getProjectNo() {
            return projectNo;
        }

        public void setProjectNo(Long projectNo) {
            this.projectNo = projectNo;
        }
4

6 回答 6

4

您遇到的问题是因为selected为空,projectNumber. 将检查更改为:

if(selected != null && selected.getProjectNumber()!=null){

// do something

}

或者另外添加一个单独的检查selected以上。

于 2013-03-05T08:36:47.013 回答
2

如果您在这里获得 NPE:

if(selected.getProjectNumber()!=null){

而所有的都是getProjectNumber()is return projectNumber,这强烈表明selectedisnull

于 2013-03-05T08:39:54.850 回答
1

从您发布的内容来看,问题似乎在于selected变量引用的对象是null. 您也必须检查:

if(selected !=null && selected.getProjectNumber()!=null){

    // do something

}

说明:这样做,因为布尔 AND(和 OR)运算符仅评估左侧条件,如果它为假,而不触及右侧,您将不再得到 a NullPointerExceptyion

编辑正如 OP 提到的那样,通过将变量更改为没有遇到问题,正如 0xCAFEBABE 的建议所暗示的那样,如果 getter 返回(或以某种方式在内部使用)一个简单的值而不是一个对象,String则可能会出现相同的错误,并且变量是:longLongnull

/** error getter */
public long getProjectNumber() { 
    //this would trz to convert null, but what will it convert to? A NullPointerExecption...
    return projectNumber;
}
于 2013-03-05T08:37:08.347 回答
1

问题是它selected是空的。检查它像:

if(selected != null && selected.getProjectNumber()!=null){

   // do something

} else {
   // here: selected = null OR projectNumber of selected is null
}
于 2013-03-05T08:38:59.407 回答
1

你检查是否selectednull

您可以执行以下操作

if(null != selected)
{
    if(null != selected.getProjectNumber())
    {
        // do something
    }
}
于 2013-03-05T08:39:09.017 回答
1

您选择的对象显然为空,请尝试执行以下操作:

if ((selected != null) && (selected.getProjectNumber()!=null)){

// do something

}
于 2013-03-05T08:39:12.883 回答