Во время работы над школьным проектом я написал следующий код:
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) { }
}
Но в глубине души это беспокоит меня и чувствует себя грязным.
Я исхожу из фона С#, где я просто воспользуюсь блоком using
, поэтому я не уверен, что "правильный" способ справиться с этим.
Каков правильный способ решения этой проблемы?