java - resource - try()
El recurso Try-With cuando AutoCloseable es nulo (1)
La especificación del lenguaje Java especifica que está cerrada solo si no es nula, en la sección 14.20.3. prueba con recursos
Un recurso se cierra solo si se inicializa a un valor no nulo.
Esto puede ser realmente útil, cuando un recurso puede presentarse a veces, y ausente a otros.
Por ejemplo, digamos que puede o no tener un proxy de cierre para algún sistema de registro remoto.
try ( IRemoteLogger remoteLogger = getRemoteLoggerMaybe() ) {
if ( null != remoteLogger ) {
...
}
}
Si la referencia no es nula, el proxy del registrador remoto se cierra, como esperamos. Pero si la referencia es nula, no se intenta llamar a close (), no se lanza NullPointerException y el código aún funciona.
¿Cómo funciona la función try-with para las variables AutoCloseable
que se han declarado null
?
Asumí que esto llevaría a una excepción de puntero nulo cuando intenta invocar close
de la variable, pero no ejecuta ningún problema:
try (BufferedReader br = null){
System.out.println("Test");
}
catch (IOException e){
e.printStackTrace();
}