我的代码如下所示,
caseX caseXObj = caseXBo.getCaseXDao().findCaseXBySID(selectedID);
if(caseXObj != null && caseXObj.getCaseInGrossAmt() != null){
} else {
caseXObj.setCaseAmt(BigDecimal.ZERO);
}
我已经处理了caseX的NUll指针以及getter,当null时,将bigdeciaml设置为默认的ZERO值。我仍然在设置行中得到Null指针异常。有什么建议吗?
答案 0 :(得分:4)
caseXObj
很可能null
,因此它会导致NullPointerException
。您应该测试这三种情况:
caseX caseXObj = caseXBo.getCaseXDao().findCaseXBySID(selectedID);
if (caseXObj != null && caseXObj.getCaseInGrossAmt() != null) {
// do something with caseXObj
} else if (caseXObj == null) {
// initialize caseXObj, you were misssing this case!
} else {
caseXObj.setCaseAmt(BigDecimal.ZERO);
}
实质上,错误在于您只测试了两种情况 - 其中有三种情况。
答案 1 :(得分:0)
假设getCaseXDao()返回null是正常的,则需要分配给caseXObj,而不是将其用作else子句中的指针。
答案 2 :(得分:0)
那是因为你没有在你的其他部分检查null。
应该是:
caseX caseXObj = caseXBo.getCaseXDao().findCaseXBySID(selectedID);
if(caseXObj != null && caseXObj.getCaseInGrossAmt() != null)
{
//...
}
else
{
if (caseXObj != null)
{
caseXObj.setCaseAmt(BigDecimal.ZERO);
}
}