0

次のコードがあります

private Long projectNumber; // with getters and setters

projectNumbernullかどうかを確認しているときに、if条件でnullポインタ例外が発生しています

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 ゲッターとセッター

public Long getProjectNo() {
            return projectNo;
        }

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

6 に答える 6

4

あなたが抱えている問題は、selectedがnullであるためですprojectNumber。チェックを次のように変更します。

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

// do something

}

または、上記の別のチェックを追加しselectedます。

于 2013-03-05T08:36:47.013 に答える
2

ここで NPE を取得した場合:

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

getProjectNumber()これは、それがreturn projectNumberであることを強く示していselectedますnull

于 2013-03-05T08:39:54.850 に答える
1

あなたが投稿したものから、問題はselected変数によって参照されるオブジェクトがnull. それも確認する必要があります:

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

    // do something

}

説明:このようにすると、ブール AND (および OR) 演算子は、左側の条件が false の場合にのみ評価され、右側に触れないため、NullPointerExceptyionもう取得されません。

編集OPが変数を問題に変更しても問題が発生しないと述べたように、0xCAFEBABEの提案が示唆するように、ゲッターがオブジェクトの代わりに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がnullであることです。次のように確認します。

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

選択したオブジェクトは明らかに null です。次のことを試してください。

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

// do something

}
于 2013-03-05T08:39:12.883 に答える