Конечно:
public <T> T retry(Callable<T> callable) throws Exception {
int count = 0;
while (true) {
try {
return callable.call();
} catch (Exception e) {
count++;
if (count == MAX_TRIES) {
throw(e);
}
}
}
}
А затем
retry(() -> doSomething(a, b));
retry(() -> doSomethingElse(a));
Эта простая реализация не очень гибкая и, тем не менее, могла бы использовать лучшую обработку исключений.Вы можете использовать библиотеку , чтобы сделать это (отказ от ответственности: я являюсь автором этой библиотеки), или, по крайней мере, посмотреть, как она работает, и повторно использовать некоторые из ее идей.