Кто-либо мог объяснить меня, почему в последних строках, br не распознан как переменная? Я даже попытался вставить br try clause
, установка его как final
, и т.д. это имеет какое-либо отношение к Java не, поддерживают закрытия? Я - 99%-й уверенный подобный код, работал бы в C#.
private void loadCommands(String fileName) {
try {
final BufferedReader br = new BufferedReader(new FileReader(fileName));
while (br.ready()) {
actionList.add(CommandFactory.GetCommandFromText(this, br.readLine()));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) br.close(); //<-- This gives error. It doesn't
// know the br variable.
}
}
Спасибо
Потому что он объявлен в блоке try. Локальные переменные, объявленные в одном блоке, недоступны в других блоках, кроме случаев, когда они содержатся в нем, т.е. переменные выходят за пределы области видимости, когда их блок заканчивается. Сделайте это:
private void loadCommands(String fileName) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(fileName));
while (br.ready()) {
actionList.add(CommandFactory.GetCommandFromText(this, br.readLine()));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) try { br.close(); } catch (IOException logOrIgnore) {}
}
}
br определен в блоке try, поэтому он не входит в область видимости в блоке finally.
Определите br вне блока try.