Возможное исключение нулевого указателя для автоклизуемой идиомы
Рассмотрим следующий блок try-with-resources:
try (Foo foo = getAFoo()) {
}
Для некоторого класса Foo
, который реализует java.lang.AutoCloseable
.
Если getAFoo()
должен был возвратить null
, тогда исключение исключений нулевого указателя было бы выбрано на закрывающей скобке (из-за времени выполнения, пытающегося вызвать close
)?
Ответы
Ответ 1
В соответствии с этим блогом Oracle:
После должного изучения экспертная группа JSR 334 решила, что семантика оператора try-with-resources на нулевом ресурсе должна быть изменена следующим образом: вызовы, сгенерированные компилятором для закрытия ресурса, будут возникать только в том случае, если ресурс не является -null.
Это означает, что вы можете закрыть любой ресурс null
в блоке try
(с ресурсами), не вызывая ошибку (и то же самое, когда программа автоматически пытается закрыть ресурс, когда заканчивается try
).
Ответ 2
Вы реализуете java.lang.AutoCloseable
, поэтому компилятор попытается закрыть ресурс, когда закончите, но процесс закрытия ресурса произойдет, только если ресурс non-null
. Поэтому в этом случае я думаю, что исключение не будет выбрано.