Est-il acceptable d'utiliser try catch à l'intérieur, enfin?
Je suis à l'aide d'un tampon écrivain et mon code, la fermeture de l'écrivain dans le bloc finally. Mon code est comme ça.
...........
BufferedWriter theBufferedWriter = null;
try{
theBufferedWriter =.....
....
......
.....
} catch (IOException anException) {
....
} finally {
try {
theBufferedWriter.close();
} catch (IOException anException) {
anException.printStackTrace();
}
}
- Je utiliser les try catch à l'intérieur de la propre code enfin comme theBufferedWriter peut également lancer une IOException. Je ne veux pas jeter cette exception à l'appel de methos. Est-ce une bonne pratique d'utiliser un try catch dans enfin? Si non quelle est l'alternative? S'il vous plaît suggérer.
Ce qui concerne,
Hiral
- c'est ok, mais pour vérifier la valeur null d'abord, c'est mieux.
- +1, pas jolie, mais il doit être fait
Vous devez vous connecter pour publier un commentaire.
Un peu plus agréable façon de le faire est d'utiliser IOUtils.closeQuiety de Apache commons-io. Il maintient votre code de rangement, et élimine quelques-uns des passe-partout qui est inhérent à Java.
Vous code devient alors:
Beaucoup plus agréable et plus expressif.
close
juste avant le bloc catch.flush()
avant le bloc catch trop, non?close
être appelé deux fois. Si vous avez déplacé le try/finally{fermer} dans le essayer bloc, vous feriez 1) seulement besoin d'appelerclose
une fois 2) éviter la redondantnull
affectation 3) pas besoin d'importer une 3ème partie de la bibliothèque. Imbriquée essaye moche, mais vous ne pouvez pas prendre des décisions sur la gestion des erreurs au niveau local, de toute façon, de sorte que le bloc catch serait en appelant le plus haut dans la pile d'appel. illegalargumentexception.blogspot.com/2008/10/...En avant Java 7, je dirais que ce que vous avez écrit est la meilleure solution.
Dans Java 7 et au-delà, vous avez Automatique De Gestion Des Ressources destinés à simplifier ces choses. Avec cette fonctionnalité, vous pouvez le faire
Ou vous pouvez utiliser Lombok et la
@Nettoyage
annotation et vous ne doit jamais écrire un try catch à l'intérieur, finalement, de nouveau.C'est comment vous le feriez normalement écrire (à Noter la
throws IOException
):Maintenant avec Lombok vous venez d'écrire
@Cleanup
sur les cours d'eauC'est ce que nous aurons à vivre avec jusqu'à ce que Java 7 et BRAS de Blocs.
C'est OK, mais vous devez tester si
theBufferedWriter
n'est pas null avant de le fermer.Vous pouvez aussi faire:
ou:
mais surtout, je ne ces opérations (par exemple, l'écriture d'un fichier) dans une méthode dédiée et préfèrent jeter l'/une Exception si l'appelant peut le manipuler (par exemple demander un autre fichier, l'arrêt de l'application, ...):
Veuillez noter: l'anglais n'est pas mon premier, ni ma langue seconde, toute aide serait appréciée
C'est ok pour mettre un try-catch dans une enfin. C'est l'outil qui fait ce que vous voulez faire. Cependant, je pense que la levée IOException sur une étroite est rare que je serais permettre de supprimer toute exception dans le corps comme si.