Je me demande si mettre une instruction return à l'intérieur d'un bloc try-with-resources empêche la fermeture automatique de la ressource.
try(Connection conn = ...) {
return conn.createStatement().execute("...");
}
Si j'écris quelque chose comme ça, la Connexion sera-t-elle fermée? Dans la documentation Oracle, il est indiqué que:
L'instruction try-with-resources garantit que chaque ressource est fermée à la fin de l'instruction.
Que se passe-t-il si la fin de l'instruction n'est jamais atteinte à cause d'une instruction de retour?
Basé sur tutoriel d'Oracle , "[la ressource] sera fermée, que l'instruction try se termine normalement ou brusquement". Il définit abruptly
à partir d'une exception.
Le retour à l'intérieur de try
est un exemple de complétion brutale, tel que défini par JLS 14.1 .
La ressource sera fermée automatiquement (même avec une instruction return
) car elle implémente l'interface AutoCloseable
. Voici un exemple qui sort "fermé avec succès":
public class Main {
public static void main(String[] args) {
try (Foobar foobar = new Foobar()) {
return;
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Foobar implements AutoCloseable {
@Override
public void close() throws Exception {
System.out.println("closed successfully");
}
}