7

代码审查工具抱怨saveSafeScan(...) 中safeScanWarnings的可能空指针取消引用if (safeScanWarnings != Null & safeScanWarnings.size() > 0)

我想知道这怎么可能?这是因为我们通过引用返回集合吗?

protected void saveSafeScan(final Response response, final Dtec dtec) throws dtecException
    {
        Collection<String> safeScanWarnings = dtec.getSafeScanWarnings();
        if (safeScanWarnings!=null && safeScanWarnings.size()>0)
        {
            Iterator<String> iterator = safeScanWarnings.iterator();

            int i = 0;
            while (iterator.hasNext())
            {
                String safeScanCode = iterator.next();
                if (i == 0)
                {
                    response.setSafeScanCode(safeScanCode);
                    response.setSafeScanCodeText(getMessage(String.format("DTECRESPONSE_SAFESCANCODE_%s",
                            StringUtils.trimToEmpty(safeScanCode))));
                }
                SafeScanWarning safeScan = new SafeScanWarning();
                safeScan.setCode(safeScanCode);
                safeScan.setMessage(String.format("DTECRESPONSE_SAFESCANCODE_%s", StringUtils.trimToEmpty(safeScanCode)));
                safeScan.setPriority(i);
                response.getSafeScanWarnings().add(safeScan);
                i++;
            }
        }
    }
4

3 回答 3

11

如果它真的指向那条线,那么在我看来,它就像代码审查工具中的一个错误。

因为它是一个局部变量,所以它不可能被空值检查和size()调用之间的任何其他东西改变——所以它不可能抛出一个NullPointerException.

于 2011-07-27T19:57:06.020 回答
0

有一个语句分支,如果执行,则保证一个null值将被取消引用,这将NullPointerException在代码执行时生成 a。当然,问题可能在于分支或语句是不可行的,并且NullPointerException永远不会被抛出。决定那是超出了他的能力的FindBugs

于 2012-03-21T04:10:31.320 回答
0

属性“dtec”应该是安全的:

    if (null!=dtec && null!=safeScanWarnings && safeScanWarnings.size()>0)
    {
      Collection<String> safeScanWarnings = dtec.getSafeScanWarnings();
于 2013-10-22T15:52:20.407 回答