Java SonarQube显示可能的空指针解引用
此代码中可能存在空指针取消引用错误:Java SonarQube显示可能的空指针解引用,java,null,sonarqube,nullreferenceexception,Java,Null,Sonarqube,Nullreferenceexception,此代码中可能存在空指针取消引用错误: if(!Util.isNull(dir)){ if (dir.isDirectory()){ if(!Util.isNull(dir.list())) if((!Util.isNull(dir.list().length))) // issue reported here if(dir.list().length == 0) // another issue reported h
if(!Util.isNull(dir)){
if (dir.isDirectory()){
if(!Util.isNull(dir.list()))
if((!Util.isNull(dir.list().length))) // issue reported here
if(dir.list().length == 0) // another issue reported here
if (dir.delete())
LOGGER.info("deleted:");
}
}
如何解决这些问题?请检查
dir.list()
是否为空。然后,您对dir.list()
执行其他调用,并假设在本例中该值不能为null
SonarJava试图告诉您,尽管dir.list()
一开始并不是空的,但第二次/第三次调用可能会变成空的
要解决这个问题:
dir.list()
的结果保存在变量中这也被称为提取变量重构,它具有额外的良好效果。如果您不希望调用之间更改
dir.list()
的结果,那么您也将提高性能,因为程序不需要再次访问文件系统来生成目录的内容。Sonar的可能副本知道我的应用程序中其他文件中的Util.isNull。我要指出的是:假设dir
是文件,dir.list()。length
从不为null,它是int
。类似地,如果dir.isDirectory()
,则dir.list()
不为空。我尝试了许多考虑,因此最终添加了dir.list()。length.Will将被删除it@vk1服务器上安装的SonarJava版本是什么?Util类的包名是什么?目录的类型是什么?如何将该值传递给这段代码(它是本地变量还是方法参数?)?请提供所有相关信息,以便任何人能够帮助您。@vk1酷!谢谢你的反馈!考虑将其标记为“接受”(绿色蜱图标)。这将给你2个信誉点(是的)和我15个信誉点(是的!),并立即向所有其他读者表明,这解决了你的问题。您甚至可以删除您的评论(因为它将被废弃)。