所以我有这个方法:
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
看Boolean
到boolean
投射不是保证
更新:
踩过代码,NPE被抛入fancyObj.getFlag()
......这对我来说没有意义。我希望在.setNavalFlag....
答案 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,通常它是错误的。