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 并Flag设置为 null。

什么是我可以100% 避免NPE 的万无一失的方法?我知道铸造不是从这里Boolean看到的保证boolean

更新:单步执行代码,NPE 被抛出fancyObj.getFlag()......这对我来说没有意义。我希望NPE投入.setNavalFlag....

4

4 回答 4

2

什么是我可以 100% 避免 NPE 的万无一失的方法?

一种万无一失的方法是明确检查null并且不尝试拆箱,Boolean除非您知道它不是null.

以您当前的代码为例:

boolean navalFlag = fancyObj.getFlag()

这试图拆箱布尔值。如果是null,您将获得 NPE。

下面的修改不会有这个问题:

Boolean navalFlag = fancyObj.getFlag()
form.setNavalFlag((navalFlag != null && navalFlag) ? "Y" : "N");
于 2013-03-15T19:19:26.120 回答
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 回答
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 回答