Это вопрос стиля кода. Я замечаю много примеров кода, включая некоторые примеры из Oracle, чтобы поток был закрыт следующим образом:
InputStream in = null;
try {
in = acquireStream();
...
} finally {
if (in != null) in.close();
}
Обратите внимание на инициализацию на null и проверьте значение null в блоке finally
.
Я обычно пишу код следующим образом:
InputStream in = acquireStream();
try {
...
} finally {
in.close();
}
Есть ли преимущества или недостатки любого подхода? Мне нравится мой стиль, потому что мне не нужна нулевая проверка. Также мне нравится избегать null
, когда это возможно. Но поскольку стиль Oracle настолько распространен в онлайн-примерах, мне интересно, есть ли у моей скрытая ошибка.
Я задаю один и тот же вопрос для InputStream
, OutputStream
, java.sql.Connection
, java.sql.PreparedStatement
и т.д. Я, как правило, приобрел ресурс вне блока try
, а затем закрою его в finally
без нулевого проверить. Есть ли что-то, что я упускаю, кроме стилистических различий?
Спасибо.