使用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)
的代码,我想它不会在那里标记警告。 (尝试让我们知道)