У меня был довольно болезненный опыт устранения неполадок при поиске и устранении некоторых ошибок, которые выглядели следующим образом:
try {
doSomeStuff()
doMore()
} finally {
doSomeOtherStuff()
}
Проблема была сложной для устранения неполадок, поскольку doSomeStuff() выбрасывал исключение, которое, в свою очередь, вызывало doSomeOtherStuff(), чтобы также генерировать исключение. Второе исключение (брошенное блоком finally) было передано моему коду, но у него не было дескриптора первого исключения (выбрано из doSomeStuff()), что стало основной причиной проблемы.
Если бы этот код сказал это, проблема была бы очевидна:
try {
doSomeStuff()
doMore()
} catch (Exception e) {
log.error(e);
} finally {
doSomeOtherStuff()
}
Итак, мой вопрос таков:
Является ли блок finally используемым без блокировки catch известным java-анти-шаблоном? (Это, безусловно, кажется не совсем понятным подклассом явно известного анти-шаблона "Не усваивайте исключения!" )