¿Alguien podría explicarme por qué en las últimas líneas, br no se reconoce como variable? Incluso he intentado poner br en el try clause
, configurándolo como final
, etc. ¿Tiene esto algo que ver con que Java no admita cierres? Estoy 99% seguro de que un código similar funcionaría en C#.Problema con "ámbitos" de variables en try catch blocks en Java
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.
}
}
Gracias
C# tiene una palabra clave 'using' que, como un bucle, permite usted para definir una variable limitada por el alcance posterior. Java no tiene eso. – Yishai
Por cierto: yo no haría 'e.printStackTrace()' aquí. Su programa continuará ejecutándose posiblemente con una lista de acciones vacía. No quieres tener eso. Solo visualice y deje que su aplicación se cierre o se bloquee con un mensaje de error claro para que el usuario final pueda tomar las medidas correspondientes. – BalusC
Todavía no sé cómo se supone que debo tratar con excepciones en Java. En C#, dejaría que esto subiera en la pila, pero si quiero hacer eso, tendré que poner una declaración de lanzamientos en esta función y en cualquier función que llame a esta. Es un PITA. –