2

だから私はこの方法を持っています:

class A(){

private Boolean Flag;

public java.lang.Boolean getFlag()
    {
        return this.Flag;
    }

public java.lang.Boolean setFlag(Boolean Flag)
    {
        this.Flag = Flag ;
    }
}

classB(){

boolean navalFlag = fancyObj.getFlag()
form.setNavalFlag(navalFlag?"Y":"N";

}

データベースは null を返し、null にFlag設定されます。

NPEを100% 回避できる確実な方法は何ですか? ここから見てキャスティングを保証するものではないことは承知Booleanしておりますboolean

更新:コードをステップ実行すると、NPEがスローされfancyObj.getFlag()ます...これは私には意味がありません。NPEが投入されると思います.setNavalFlag....

4

4 に答える 4

2

NPE を 100% 回避できる確実な方法は何ですか?

確実な方法の 1 つは、明示的にチェックして、そうでないことがわかっている場合を除きnull、ボックスを開けようとしないことです。Booleannull

現在のコードを例に取るには:

boolean navalFlag = fancyObj.getFlag()

これはブール値のボックス化を解除しようとします。の場合nullは、NPE を取得します。

次の変更では、この問題は発生しません。

Boolean navalFlag = fancyObj.getFlag()
form.setNavalFlag((navalFlag != null && navalFlag) ? "Y" : "N");
于 2013-03-15T19:19:26.120 に答える
0

メソッドを変更する

public java.lang.Boolean getFlag()
{
    return this.Flag;
}

のようなものに

public java.lang.Boolean getFlag()
{
    (Flag==null) ? Boolean.FALSE : Flag;
}
于 2013-03-15T19:35:31.023 に答える
0

値オブジェクトのラッパーではなく、ブールプリミティブ型を使用してください。

自分でデータベースから値を取得する場合は注意が必要です。null の解釈方法を理解する必要があります。通常は false です。

于 2013-03-16T08:16:57.327 に答える
0
Boolean navalFlag = fancyObj.getFlag()
form.setNavalFlag((navalflag != null && navalFlag) ? "Y" : "N");

あなたのコメントを間違って理解していたので、編集の編集:

コメントへの私の回答を参照してください:boolean navalFlag = fancyObj.getFlag()に自動的に翻訳されますboolean navalFlag = fancyObj.getFlag().booleanValue()

于 2013-03-15T19:21:35.887 に答える