findbugs msg:方法调用为无条件解除引用的参数传递null

时间:2011-12-08 13:36:44

标签: java date findbugs

我有以下代码:

          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。

日期是否有更好的默认选项?

感谢阅读!

4 个答案:

答案 0 :(得分:2)

可能会抱怨mySearchTOresult可能为空。

答案 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并查看警告是否消失。