2013-03-05 80 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