Problème avec “étendues” de variables dans les blocs try catch en Java

Quelqu'un pourrait-il m'expliquer pourquoi, dans les dernières lignes, br n'est pas reconnu en tant que variable? J'ai même essayé en mettant br dans le try clause, le définir comme final, etc. Est ce que cela a quelque chose à voir avec Java supporte pas les bouchons? Je suis à 99% sûr de soi similaires code en 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.
    }       
}

Grâce

  • C# est un using mot-clé, comme une boucle for, vous permet de définir une variable limitée par le champ d'application. Java n'a pas que.
  • Btw: je ne ferais pas e.printStackTrace() ici. Votre programme devrait continuer à fonctionner avec éventuellement un vide de la liste des actions. Vous ne voulez pas que. Il suffit de jeter à travers et laissez votre la fermeture de l'application ou de décrochage avec un message d'erreur clair, de sorte que l'utilisateur final peut prendre des mesures en conséquence.
  • Je ne sais toujours pas comment suis-je censé traiter les Exceptions en Java. En C#, j'avais laisser passer ça dans la pile, mais si je veux le faire, je vais mettre une lance dans la déclaration de cette fonction, et une fonction qui appelle celui-ci. Ses un pain PITA.