1

我的代码如下所示,

caseX caseXObj = caseXBo.getCaseXDao().findCaseXBySID(selectedID);

if(caseXObj != null && caseXObj.getCaseInGrossAmt() != null){

} else {
    caseXObj.setCaseAmt(BigDecimal.ZERO);
}

我已经为 caseX 和 getter 处理了 NULL 指针,当为 null 时,将 bigdeciaml 设置为默认的零值。我仍然在设置器行中得到空指针异常。有什么建议吗?

4

3 回答 3

4

很有可能caseXObjnull,所以它会导致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);
}

本质上,错误在于您只测试了两种情况——其中有三种。

于 2013-04-19T15:20:47.983 回答
0

假设 getCaseXDao() 返回 null 是可以的,您需要分配给 caseXObj 而不是将其用作 else 子句中的指针。

于 2013-04-19T15:22:41.433 回答
0

那是因为您没有在 else 部分检查 null 。

它应该是:

caseX caseXObj = caseXBo.getCaseXDao().findCaseXBySID(selectedID);

if(caseXObj != null && caseXObj.getCaseInGrossAmt() != null)
{
//...
}
else
{
  if (caseXObj != null)
  {
    caseXObj.setCaseAmt(BigDecimal.ZERO);
  }
}
于 2013-04-19T15:23:41.873 回答