我有以下部分代码:
public void deepSearch(File fileToLook,ArrayList<File> fileStorage,DefaultComboBoxModel<String> mod){
if(fileToLook.isDirectory())
{
for(File f:fileToLook.listFiles())
deepSearch(f,fileStorage,mod);
}
else if(fileToLook != null){
fileStorage.add(fileToLook);
mod.addElement(fileToLook.getName());
}
else
System.out.println("Reached an end.");
}
但是eclipse给了我一个死密码警告:
else
System.out.println("Reached an end.");
你能解释一下为什么会这样吗。提前谢谢
答案 0 :(得分:4)
嗯,fileToLook
语句在达到else
语句时不能为空,因为如果它是null
,则第一个条件将抛出NullPointerException
。
重构该方法更有意义,并避免潜在的NullPointerException
:
if(fileToLook != null) {
if(fileToLook.isDirectory()) {
for(File f:fileToLook.listFiles())
deepSearch(f,fileStorage,mod);
} else {
fileStorage.add(fileToLook);
mod.addElement(fileToLook.getName());
}
} else {
System.out.println("Reached an end."); // not sure if you really need this
// statement. It looks like a debug print to me
}
答案 1 :(得分:2)
实际上不需要null if (fileToLook != null)
检查,因为if (fileToLook.isDirectory())
已经抛出NullPointerException,如果它为null。因此永远无法达到最后的其他目的。
答案 2 :(得分:2)
如果if
为空,则第一个NullPointerException
条件将抛出fileToLook
。如果它不为空,则采用第二个分支。因此,第三个分支永远不会被执行。
您可能希望先进行空检查。