Java попробуй / поймай / наконец лучшие практики при получении / закрытии ресурсов
Работая над школьным проектом, я написал следующий код:
FileOutputStream fos;
ObjectOutputStream oos;
try {
fos = new FileOutputStream(file);
oos = new ObjectOutputStream(fos);
oos.writeObject(shapes);
} catch (FileNotFoundException ex) {
// complain to user
} catch (IOException ex) {
// notify user
} finally {
if (oos != null) oos.close();
if (fos != null) fos.close();
}
Проблема в том, что Netbeans говорит мнеresource.close()
линии бросаютIOException
и поэтому должен быть либо пойман, либо объявлен. Это также жалуется, чтоoos
а такжеfos
может еще не инициализироваться (несмотря на нулевые проверки).
Это кажется немного странным, поскольку весь смысл состоит в том, чтобы остановитьIOException
прямо там.
Мое колено - это сделать следующее:
} finally {
try {
if (oos != null) oos.close();
if (fos != null) fos.close();
} catch (IOException ex) { }
}
Но в глубине души это беспокоит меня и чувствует себя грязным.
Я пришел из C # фона, где я бы просто воспользоватьсяusing
блок, так что я не уверен, что «правильный» способ справиться с этим.
Какиеявляется правильный способ справиться с этой проблемой?