Подтвердить что ты не робот

Возможное исключение нулевого указателя для автоклизуемой идиомы

Рассмотрим следующий блок try-with-resources:

try (Foo foo = getAFoo()) {

}

Для некоторого класса Foo, который реализует java.lang.AutoCloseable.

Если getAFoo() должен был возвратить null, тогда исключение исключений нулевого указателя было бы выбрано на закрывающей скобке (из-за времени выполнения, пытающегося вызвать close)?

4b9b3361

Ответ 1

В соответствии с этим блогом Oracle:

После должного изучения экспертная группа JSR 334 решила, что семантика оператора try-with-resources на нулевом ресурсе должна быть изменена следующим образом: вызовы, сгенерированные компилятором для закрытия ресурса, будут возникать только в том случае, если ресурс не является -null.

Это означает, что вы можете закрыть любой ресурс null в блоке try (с ресурсами), не вызывая ошибку (и то же самое, когда программа автоматически пытается закрыть ресурс, когда заканчивается try).

Ответ 2

Вы реализуете java.lang.AutoCloseable, поэтому компилятор попытается закрыть ресурс, когда закончите, но процесс закрытия ресурса произойдет, только если ресурс non-null. Поэтому в этом случае я думаю, что исключение не будет выбрано.