我有以下代码:
if (null != result[1]) {
mySearchTO.setDt(dateFormat2.parse(result[1].toString()));
} else {
mySearchTO.setDt(null);
}
其中result是对象数组,dateFormat2是SimpleDateFormat。
Findbugs提供以下内容:
在调用站点传递可能为空的值,其中所有已知目标方法将无条件地取消引用它。这很可能导致空指针异常。
这条消息告诉我什么?如何解决这个错误?
我正在检查null的结果,以便我的Parse方法不会中断。但是如果结果为null,我想将SearchTO中的Dt字段设置为某个默认值,这里我将其视为null。
日期是否有更好的默认选项?
感谢阅读!
答案 0 :(得分:2)
可能会抱怨mySearchTO
或result
可能为空。
答案 1 :(得分:0)
您的mySearchTO
字段本身是否可能为空?
否则,它可能没有意识到result[1]
已经被检查为null - 可能因为它正在从数组中读取一个值而变得复杂。如果您在条件上方执行Object o = result[1];
之类的操作,请检查o != null
作为条件,然后在条件中调用o.toString()
该怎么办?
答案 2 :(得分:0)
消息引用数组result
,您只检查索引1下的元素是否为空,但数组本身也可以为空。
if (result != null && null != result[1]) {
mySearchTO.setDt(dateFormat2.parse(result[1].toString()));
} else {
mySearchTO.setDt(null);
}
我假设mySearchTO和dataForma2已正确初始化。
答案 3 :(得分:0)
根据我对NP_NULL_PARAM_DEREF explanation的解读,Findbugs试图警告你,这句话会让你对NPE感到厌恶:
mySearchTO.setDt(null);
// guess there's line at mySearchTO.setDt looking like...
// ... valuePassedToDt.toString() - would give NPE for null
...此方法调用为非空方法参数传递空值。要么将参数注释为始终为非空的参数,要么分析表明它将始终被解除引用...
要测试是否确实如此,请将上面的内容替换为
throw new RuntimeException("can't handle null in result[1]");
然后重新运行Findbugs并查看警告是否消失。