【发布时间】:2012-01-17 11:12:16
【问题描述】:
我有以下代码:
try {
reader = new BufferedReader(new FileReader(file));
String records = "";
System.out.println("EMITTER QUEUE BACKUP: restoring from file...");
try {
while(reader.ready()) {
records += reader.readLine();
}
} catch (IOException e) {
System.out.println("EMITTER QUEUE BACKUP: error restoring");
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
doSomethingWith(records);
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
doSomethingWith(records); 行中的 records 变量会导致未定义的错误。没关系,我可以理解它在第一个try 块中的定义有时可能不会出现。但是有一个问题:如果我删除doSomethingWith(records); 行,那么第一个try 块中的records 变量将被标记为未使用!!!那么为什么即使它导致明显的错误,它也能识别出它在该行中使用,因为它假定它不是同一个变量,因此它不能代表String records = "" 的用例?
如果这很重要,我的 IDE 是 Eclipse。
【问题讨论】:
-
不,您的 IDE 与您编写的语言无关 :-)
-
我将代码粘贴到我的 Eclipse 中,无论我是否删除
doSomethingWith(records);,records变量都未使用。这是不同的变量。你有类属性records,对吗? -
嗯,不,我没有这样的类属性。这段代码实际上就是这个类的所有内容(例如,除了阅读器的声明)
-
@PeterGwiazda 您可能设置了不同的编译器错误/警告设置。我在 Eclipse 中的设置与 OP 相同。
-
这不应该编译。这里
doSomethingWith(records);变量records不存在。