我在 eclipse 中从if(line == null)语句到r.close()语句收到死代码警告。BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));int counter = 0;while(true){ String line = r.readLine(); counter++; if(line.contains(" = ")) { String[] keyVal = new String[2]; keyVal[0] = line.substring(0, line.indexOf(" = ") - 1); keyVal[1] = line.substring(line.indexOf(" = ") + 3); buffer.add(keyVal); } else { new Exception("Invalid expression at line " + counter + " in file " + file.getPath()).printStackTrace(); } if(line == null) // dead code here { break; }}System.out.println("here is a dead code");r.close(); // another dead code
2 回答
森林海
TA贡献2011条经验 获得超2个赞
您正在line使用if(line.contains(" = ")). 如果line是null,aNullPointerException会被抛出,你没有抓住。因此,break;无法达成该声明。如果if(line == null)达到该语句,则不是null。从逻辑上讲,break;永远不会执行,因此无法访问。Eclipse 似乎正在检测到这一点。请注意,这仍然可以用 javac 编译;这只是 Eclipse 的警告。
此外,如果break;是不可达的,那么就没有办法结束while(true),所以while块之外的任何东西都是不可达的。因此 Eclipse 也会对此发出警告。
逐行读取文件、检查linefornull以指示流结束的常用方法是
String line;
while ( (line = r.readLine() ) != null)
{
// rest of processing here
}
这不是最干净的代码,在与相等检查相同的表达式中赋值,但它是执行这种读取和检查操作的常用方法。
这样while语句就可以正常结束了,以后就不用再检查了null。这也使得while块后面的任何代码都可以访问。
添加回答
举报
0/150
提交
取消