Я либо пишу обработчики исключений немедленно, либо разрешаю распространению исключений вверх. Я большой поклонник того, что я называю «Вы не собираетесь возвращаться и исправлять это позже, а вы?» принцип. Вы говорите, что так и будет, но, честно говоря, как только вы заработаете, вы не собираетесь возвращаться и исправлять это позже, не так ли? Просто сделай это прямо сейчас! Напишите ваши обработчики исключений прямо сейчас или добавьте предложение throws
и сделайте это проблемой кого-то другого. Делай правильные вещи прямо сейчас.
Но ты знаешь что, иногда ты не можешь. Что бы вы ни делали, не проглатывает исключения с пустыми обработчиками исключений! Это зло:
try {
connection.close();
}
catch (Exception e) {
// TODO Auto-generated code
}
Я бросаю удар любому, кто в моей команде это проверяет.
Если вы действительно не знаете, что делать с исключением, и не можете добавить предложение throws
для его распространения вверх, по крайней мере, выполните что-то наполовину ответственное. Напечатайте трассировку стека, если ничего больше. Это не идеально, но, по крайней мере, вы не скрываете ошибок.
catch (IOException exception) {
exception.printStackTrace();
}
Лучше регистрировать его через систему регистрации вашего приложения, хотя вы не должны делать это привычкой. Это должно быть обязанностью вызывающего абонента обрабатывать подобные вещи.
catch (IOException exception) {
log.error(exception, "Unable to open configuration file %s.", fileName);
}
В крайнем случае, вы можете выполнить конечный обход предложения throws
, заключив исключение в RuntimeException
. По крайней мере, вы даете кому-то выше в цепочке вызовов шанс справиться с ошибкой, что обычно является правильным решением.
catch (IOException exception) {
throw new RuntimeException(exception);
}