我有以下部分代码:
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.");
你能解释一下为什么会这样吗?提前感谢
当到达else
语句时,fileToLook
不能为空,因为如果它是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
}
那么空if (fileToLook != null)
检查实际上是不需要的,因为if (fileToLook.isDirectory())
已经抛出NullPointerException,如果它是空的。因此,最后一个else永远无法到达。
如果fileToLook
为空,则第一个if
条件将抛出NullPointerException
。如果它不为空,则取第二个分支。因此,第三个分支永远不会执行。
你可能想把空检查放在前面