[英]Why am I getting dead code warning here in java?
我从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
您所操作line
与if(line.contains(" = "))
如果line
为null
,则将抛出NullPointerException
,您没有捕获到。 因此, break;
声明无法达到。 如果到达if(line == null)
语句,则它不是null
。 逻辑上, break;
将永远不会被执行,所以它是无法到达的。 看来Eclipse正在检测到这一点。 注意,仍然可以使用javac进行编译。 这只是Eclipse的警告。
此外,如果break;
是不可达的,那么就没有办法结束while(true)
,所以while
块之外的任何东西都是不可达的。 因此,Eclipse也对此发出警告。
逐行读取文件,检查该line
是否为null
以指示流结束的通常方法是
String line;
while ( (line = r.readLine() ) != null)
{
// rest of processing here
}
它不是最干净的代码,在赋值中的赋值与相等性检查相同,但这是执行这种读取和检查操作的常用方法。
这样, while
语句可以正常结束,因此以后无需检查null
。 这也使得在while
块之后的任何代码都可以访问。
放
if(line == null)
{
break;
}
之前
if(line.contains(" = "))
之所以说它是无效代码,是因为两个if else语句都可能导致异常,从而使该代码之后的任何代码成为无效代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.