Допустим, у меня есть функция с именем foo (). В foo () есть блок try-catch-finally. Внутри блока catch функция foo () вызывается рекурсивно.
Мой вопрос:
Как сделать так, чтобы блок finally выполнялся только один раз при исходном вызове функции?
Я хочу ограничить количество рекурсивных вызовов, которые можно сделать, просто используя счетчик (целое число, которое я увеличиваю). Пожалуйста, ознакомьтесь с примером кода ниже, и вы получите общее представление о том, чего я пытаюсь достичь:
private Integer recursion_counter = 0;
public ReturnType foo(){
ReturnType returnType = new ReturnType();
try{
// Try to do something...
returnType = doSomething();
} catch (Exception e){
if (recursion_counter == 5) {
// Issue not fixed within 5 retries, throw the error
throw e;
} else {
recursion_counter++;
attemptToFixTheIssue();
returnType = foo();
return returnType;
}
} finally{
resetRecursionCounter();
}
return returnType;
}
private void resetRecursionCounter(){
recursion_counter = 0;
}
Если я не ошибаюсь, блок finally может вызываться несколько раз, чего я не хочу.
Если вы считаете, что есть лучший способ сделать это (например, использовать что-то, кроме возрастающего целого числа и т. Д.), Пожалуйста, поделитесь своими мыслями.