重复一些事情直到成功,但最多3次

时间:2018-06-09 11:39:32

标签: java

自Java编程以来,我需要多次编写类似的东西:

做一些可能会失败的事情。如果失败,请再试一次,但最多3次(或2次或5次)。

这种方法应该有效:

for (int i = 0; i < 3; i++) {
    try {
        doSomething();
    } catch(BadException e) {
        continue;
    }
    break;
}

但我不认为这是非常富有表现力的。你有更好的解决方案吗?

这样的事情会很好:

try (maxTimes = 3) {
    doSomething();
} catch(BadException e) {
    retry;
}

或者:

try (maxTimes = 3) {
    doSomething();
    if(somethingFailed()) {
        retry;
    }
}

但这对Java来说是不可能的。你知道一种可能的语言吗?

1 个答案:

答案 0 :(得分:7)

Java不允许您发明自己的语法,但您可以定义自己的方法来帮助您用更少的代码表达概念:

public static boolean retry(int maxTries, Runnable r) {
    int tries = 0;
    while (tries != maxTries) {
        try {
            r.run();
            return true;
        } catch (Exception e) {
            tries++;
        }
    }
    return false;
}

现在你可以像这样调用这个方法:

boolean success = retry(5, () -> doSomething());
// Check success to see if the action succeeded
// If you do not care if the action is successful or not,
// ignore the returned value:
retry(5, () -> doSomethingElse());

Demo.