此代码中可能存在空指针取消引用错误:
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()
进行其他调用,并假设在这种情况下不能为空。
SonarJava试图告诉你,即使dir.list()
一开始就不是空的,但它在第二次/第三次调用时可能会变成空。
要解决此问题,请执行以下操作:
- 将
dir.list()
的结果保存在变量中 - 检查变量是否不为空
- 使用变量
这也称为提取变量重构,并且具有额外的良好效果。如果您不希望dir.list()
的结果在调用之间发生变化,那么您也将提高性能,因为程序不需要再次访问文件系统来生成目录的内容。