Я прочитал несколько других постов, таких как , этот о том, как избежать повторения в блоках Java catch
. Очевидно, что я действительно хочу, это "multi-catch", но, учитывая, что Java 7 еще не пришла, есть хороший шаблон, позволяющий мне добавлять состояние в мои исключения, а затем перебрасывать их, без захвата кухонной раковиной ?
В частности, у меня есть некоторый код, который выполняет библиотечные вызовы, которые могут генерировать исключения, но не обеспечивают почти достаточный контекст для успешной отладки. Я обнаружил, что у меня возникла проблема: я захожу внутрь, оборачивая библиотечный вызов в try / catch, перехватывая конкретное исключение, затем добавляя дополнительную информацию о состоянии в блок catch
и перебрасывая перехваченное исключение. Затем я повторяю этот цикл снова и снова, каждый раз находя новое условие ошибки для регистрации. У меня получается
try {
make_library_call();
}
catch (SomeException e){
throw new SomeException ("Needed local state information is " + importantInfo, e);
}
catch (SomeOtherException e){
throw new SomeOtherException ("Needed local state information is " + importantInfo, e);
}
catch (YetAnotherException e){
throw new YetAnotherException ("Needed local state information is " + importantInfo, e);
}
и т. Д. И т. Д. Я думаю, что я действительно хотел бы видеть больше по линии
try {
make_lib_call();
}
catch(Exception e){
e.AddSomeInformationSomehow("Needed Info" + importantInfo);
throw e;
}
при условии, что в этом случае e
сохранит свой фактический тип времени выполнения при перебрасывании - в этом случае даже перехват непроверенного будет, вероятно, нормальным, так как я буду перебрасывать их, и они получат выгоду от с дополнительной информацией о состоянии. Я думаю, что альтернатива может быть что-то вроде
try{
make_lib_call();
}
finally {
if (/*an exception happened*/)
logger.debug("Some state info: " + importantInfo);
}
но я не знаю, как написать условное. Это безумие / неправильно?