死代码警告java

时间:2016-07-03 15:12:20

标签: java recursion

我有以下部分代码:

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.");

你能解释一下为什么会这样吗。提前谢谢

3 个答案:

答案 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。如果它不为空,则采用第二个分支。因此,第三个分支永远不会被执行。

您可能希望先进行空检查。