Comment fonctionne la fonctionnalité d'essai avec les variables AutoCloseable
qui ont été déclarées null
?
J'ai supposé que cela conduirait à une exception de pointeur nul lorsqu'il tente d'appeler close
sur la variable, mais cela ne pose aucun problème:
try (BufferedReader br = null){
System.out.println("Test");
}
catch (IOException e){
e.printStackTrace();
}
La spécification de langue Java Java spécifie qu'elle n'est fermée que si elle n'est pas nulle, dans la section 14.20.3. Try-with-resources :
Une ressource n'est fermée que si elle est initialisée à une valeur non nulle.
Cela peut en fait être utile, lorsqu'une ressource peut parfois être présente et absente d'autres.
Par exemple, supposons que vous disposiez ou non d'un proxy pouvant être fermé à un système de journalisation distant.
try ( IRemoteLogger remoteLogger = getRemoteLoggerMaybe() ) {
if ( null != remoteLogger ) {
...
}
}
Si la référence n'est pas nulle, le proxy de l'enregistreur distant est fermé, comme prévu. Mais si la référence est nulle, aucune tentative n'est faite pour l'appeler close (), aucune NullPointerException n'est levée et le code fonctionne toujours.