数据库将null返回到布尔变量

时间:2013-03-15 19:18:00

标签: java nullpointerexception

所以我有这个方法:

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?我知道从here

Booleanboolean投射不是保证

更新: 踩过代码,NPE被抛入fancyObj.getFlag() ......这对我来说没有意义。我希望在.setNavalFlag....

中抛出NPE

4 个答案:

答案 0 :(得分:2)

  

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

一种万无一失的方法是明确检查null并且不要尝试取消Boolean的取消包装,除非您知道它不是null

以您当前的代码为例:

boolean navalFlag = fancyObj.getFlag()

这会尝试取消装配布尔值。如果是null,则会获得NPE。

以下修改不会出现此问题:

Boolean navalFlag = fancyObj.getFlag()
form.setNavalFlag((navalFlag != null && navalFlag) ? "Y" : "N");

答案 1 :(得分:0)

Boolean navalFlag = fancyObj.getFlag()
form.setNavalFlag((navalflag != null && navalFlag) ? "Y" : "N");

编辑编辑,因为我错误地理解了您的评论:

请参阅我对评论的回答:boolean navalFlag = fancyObj.getFlag()会自动翻译为boolean navalFlag = fancyObj.getFlag().booleanValue()

答案 2 :(得分:0)

更改方法

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

类似

public java.lang.Boolean getFlag()
{
    (Flag==null) ? Boolean.FALSE : Flag;
}

答案 3 :(得分:0)

使用布尔基元类型,而不是值对象中的包装器。

如果您自己从数据库中检索值,则必须小心,您必须了解如何解释null,通常它是错误的。