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 блок, так что я не уверен, что «правильный» способ справиться с этим.

Какиеявляется правильный способ справиться с этой проблемой?

Ответы на вопрос(8)

Ваш ответ на вопрос