Рассмотрим ситуацию, когда у меня есть три (или более) способа выполнения вычисления, каждый из которых может сбой с исключением. Чтобы выполнить каждый расчет до тех пор, пока мы не найдем тот, который преуспевает, я делаю следующее:
double val;
try { val = calc1(); }
catch (Calc1Exception e1)
{
try { val = calc2(); }
catch (Calc2Exception e2)
{
try { val = calc3(); }
catch (Calc3Exception e3)
{
throw new NoCalcsWorkedException();
}
}
}
Есть ли какой-либо приемлемый шаблон, который лучше всего подходит для этого? Конечно, я мог бы обернуть каждый расчет в вспомогательном методе, который возвращает null при ошибке, а затем просто использует оператор ??
, но есть ли способ сделать это в более общем плане (т.е. без необходимости писать вспомогательный метод для каждого метода я хотите использовать)? Я думал о написании статического метода с использованием дженериков, который обертывает какой-либо данный метод в try/catch и возвращает null при ошибке, но я не уверен, как бы я это сделал. Любые идеи?