繁体   English   中英

Eclipse死代码警告,但是出了什么问题?

[英]Eclipse dead code warning, but what is wrong?

我已经编写了一种方法来检查我的字符串是否在文件中,但是eclipse会给出无效代码警告。 这是我的方法:

private boolean KeyPresent(String key){
    try{
        BufferedReader fileReader=new BufferedReader(new FileReader(keyPath));  
        while(true){
            String s=fileReader.readLine();
            if(s.equals(key)){
                fileReader.close();
                return true;
            }else if(s==null){
                fileReader.close();
                return false;
            }
        }
    }catch(IOException e){
            e.getStackTrace()
            return false;
    }
}

else if(s==null)部分是警告的来源。 为什么? 如果找不到任何匹配的结果(并且即将输出均为null),则return false 我认为还可以。 怎么了?

还有一个问题。 哪个更好用?

String s;
while(true){
    s="New Value";
    ....
}

要么

while(true){
    String s="new value";
    ...
}

我认为垃圾收集器会消耗系统资源,因此第一个更好。 但是,我在第二个例子中看到了更多示例。 您会使用哪一个?

查看整个if / else:

if (s.equals(key)) {
    ...
} else if (s == null) {
    ...
}

如果s null,则s.equals(key)将引发NullPointerException因此,您永远不会进入第二个if块。

无论如何,您都应该使用try-with-resources块,就我个人而言,我也不会捕获IOException ……只要让它冒泡:

private boolean keyPresent(String key) throws IOException {
    try (BufferedReader reader = new BufferedReader(new FileReader(keyPath))) {
        String line;
        while ((line = reader.readLine()) != null) {
            if (line.equals(key)) {
                return true;
            }
        }
        return false;
    }
}

注意这里没有垃圾收集差异。 在循环之前声明变量仅意味着您可以在while条件内分配值。

如果s为null,则将执行第一个if并将抛出NullPointerException。 您的else if无法执行。 您必须切换ifelse if才能正确处理空指针。

回答很简单:如果s将为null,则在此行

s.equals(key)

NullPointerException将被抛出,并且programm将永远不会丰富此内容

else if (s == null)

条件。 仅当s!= null时,programm才会丰富此条件。 因此,这种情况总是错误的 您最好用以下方式重写此代码段:

while (true) {
            String s = fileReader.readLine();
            if (s == null) {
                fileReader.close();
                return false;
            } else if (s.equals(key)) {
                fileReader.close();
                return true;
            }
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM