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