使用klocwork进行错误分析时,出现警告Null pointer dereference of 'nextLineDn' where null is returned from a method

显然其他静态分析工具findbug也给出相同的警告。

但很明显,我在使用它之前先检查是否为空。

      int noOfLines = device.getLines().size();
        if( lineNo != 0 && noOfLines > lineNo ) // if next line exists
        {
            nextLineDn = device.getDn(lineNo+1);
            if(!Util.isNullOrEmpty(nextLineDn))
            {
                return (nextLineDn.contains("@")) ? nextLineDn.split("@")[0] : nextLineDn;
            }
        }


class Util

public static boolean isNullOrEmpty(String str) {
    return (str == null || str.isEmpty());
}


有人可以给我一些想法吗?
我在相同的条件下收到了很多警告。不知道可以采取什么措施来消除警告。

最佳答案

由于Klocwork Insight是静态源代码分析工具,因此它可能无法进一步解密您在Util类中拥有一个名为isNullOrEmpty()的方法,而您实际上是在进行null检查。因此,它在您的IDE中显示警告。

静态分析工具会尝试提前发现潜在的缺陷。因此,这里Klocwork会告诉您:device.getDn()可能返回null,请谨慎使用nextLineDn

但是,如果您放置类似(nextLineDn!=null)的代码,我想它不会在那里标记警告。 (尝试让我们知道)

10-08 13:14