2013-03-05 79 views
0

我有以下代码空指针异常的长变量

private Long projectNumber; // with getters and setters 

,当我检查projectNumber是否为空或不是,我在获得空指针异常如果条件

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

// do something 

} 

什么可能是这个原因,尽管Long是一个包装类。

如果我更改projectNumber从长到字符串,它工作正常。

更新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 getter和setter

public Long getProjectNo() { 
      return projectNo; 
     } 

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

如果你写'null.getProjectNumber()'('selected'为'null'),你会得到同样的异常。 – Maroun 2013-03-05 08:37:41

+0

你的long不是一个变量,而是一个原始值的Wrapper类。因此,它可以是未初始化的。首先访问包装类的方法而不初始化它会导致NullPointerException。 – 0xCAFEBABE 2013-03-05 08:38:46

+1

@ 0xCAFEBABE如果getter返回一个'long'而不是'Long',不是吗?但我认为,由于OP的变量为“长”,他确实宣布吸气剂也回报... – ppeterka 2013-03-05 08:42:42

回答

1

问题是selected为空。检查它想:

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

    // do something 

} else { 
    // here: selected = null OR projectNumber of selected is null 
} 
4

你是因为这个问题selected为空,projectNumber。将支票更改为如下所示:

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

// do something 

} 

或者或者为上面的selected添加单独的支票。

1

从您发布的内容可以看出,问题在于selected变量引用的对象是null。你必须检查它:

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

    // do something 

} 

说明:这样做,这样,作为布尔AND(和OR)如果是假的运算符计算只有左条件,不碰右侧,你将不会再获得NullPointerExceptyion

编辑作为OP提到,通过改变变量String问题没有遇到过,因为0xCAFEBABE的建议意味着,如果获取的回报(或以某种方式在内部使用)相同的错误也许可以简单long值,而不是一个Long对象,和该变量的值是null

/** error getter */ 
public long getProjectNumber() { 
    //this would trz to convert null, but what will it convert to? A NullPointerExecption... 
    return projectNumber; 
} 
+0

因为一些奇怪的原因'selected'是'null',如果'projectNumber'是'String'那么''selected''''''不是null' – user75ponic 2013-03-05 10:34:44

+0

@Polppan也请发布getter方法。另外,很高兴看到你如何获得'selected'。 – ppeterka 2013-03-05 10:36:52

+0

我已经在我的问题中包含了getter和setter作为更新1 – user75ponic 2013-03-05 11:10:15

1

你检查是否selectednull

,你可以做以下

if(null != selected) 
{ 
    if(null != selected.getProjectNumber()) 
    { 
     // do something 
    } 
} 
1

选择你的目标显然是空,尽量做到:

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

// do something 

} 
2

如果你在这里得到一个NPE:

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

和所有getProjectNumber()确实是return projectNumber,这强烈表明selectednull

+1

他让你:D – Maroun 2013-03-05 08:40:07

+0

如果我把'projectNumber'从'Long'改成'String',它可以正常工作。 – user75ponic 2013-03-05 08:40:45

+2

@Polppan:然后在你的代码中还有其他的事情你没有告诉我们。请显示一个完整的,可运行的示例来演示问题。 – NPE 2013-03-05 08:41:35