Работая над школьным проектом, я написал следующий код:
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
, поэтому я не уверен, какой «правильный» способ справиться с этим.
Какой правильный способ решить эту проблему?