Try-With Resource, когда AutoCloseable имеет значение null
Как работает функция try-with для AutoCloseable
переменные, которые были объявлены null
?
Я предполагал, что это приведет к исключению нулевого указателя при попытке вызвать close
на переменную, но это не проблема:
try (BufferedReader br = null){
System.out.println("Test");
}
catch (IOException e){
e.printStackTrace();
}
1 ответ
Спецификация языка Java указывает, что она закрыта, только если она не равна нулю, в разделе 14.20.3. попробуй с ресурсами:
Ресурс закрывается, только если он инициализирован ненулевым значением.
На самом деле это может быть полезно, когда ресурс может присутствовать иногда и отсутствовать у других.
Например, предположим, что вы можете иметь или не иметь закрываемый прокси для какой-либо удаленной системы ведения журналов.
try ( IRemoteLogger remoteLogger = getRemoteLoggerMaybe() ) {
if ( null != remoteLogger ) {
...
}
}
Если ссылка ненулевая, прокси удаленного логгера закрывается, как мы и ожидаем. Но если ссылка имеет значение null, не предпринимается попытка вызвать для нее close(), не генерируется исключение NullPointerException, и код все еще работает.