В настоящее время я просматриваю код Java коллег, и я вижу много случаев, когда каждый отдельный оператор, который может вызвать исключение, инкапсулируется в его собственном try / catch. Где все блоки catch выполняют одну и ту же операцию (какая операция не имеет отношения к моему вопросу).
Мне это кажется запахом кода, и я помню, как читал, что это распространенный антипаттерн. Однако я не могу найти никаких ссылок по этому поводу.
Итак, считается ли try / catch для каждого отдельного оператора, который вызывает и исключение, анти-шаблоном, и какие аргументы подтверждают это?
Сконструированный пример: (Не относится к исходной проблеме, поэтому, пожалуйста, не обращайте внимания на другие проблемы с этим примером, поскольку он просто создан для иллюстрации того, что я имею в виду.)
public int foo()
{
int x, y = 7;
try
{
x = bar(y);
}
catch(SomeException e)
{
return 0;
}
try
{
y = baz(x,y);
}
catch(SomeOtherException e)
{
return 0;
}
/* etc. */
return y;
}
(Предположим, что здесь уместно перехватывать оба исключения, т.е. мы знаем, что с ними делать, и уместно вернуть 0 в обоих случаях.)