-2

我正在尝试将重试逻辑应用于许多方法。例如,我想重试一定次数的 method1(String) 和 method2(int, String)。

理想情况下,我希望:

int count = 0;
while (count < MAX_TRIES) {
    try { 
        //run method
    } catch (Exception e) {
        //increment count
        //throw e if count == MAX_TRIES
    }
}

在我可以作为参数method1或method2传入的方法中。有没有办法做到这一点?谢谢!

4

1 回答 1

1

当然:

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));

这个简单的实现不是很灵活,但是可以使用更好的异常处理。你可以使用一个库来做到这一点(免责声明:我是这个库的原作者),或者至少看看它是如何工作的并重用它的一些想法。

于 2018-09-29T00:19:13.253 回答