如果条件块有多个返回,则重新执行



在其中一个应用程序中,必须以顺序方式执行任务。有'n'个任务,如果前一个任务成功完成,则需要执行这些任务-由状态变量跟踪。

方法中的多重if条件看起来很难看,需要用某种类型来替换。

public boolean process() {
String status;
status = doTask1();
if (StringUtils.equals(status, "error")) {
return true;
}
status = doTask2();
if (StringUtils.equals(status, "error")) {
return true;
}
status = doTask3();
if (StringUtils.equals(status, "error")) {
return true;
}
return false;
}

您可以保留一个任务列表,然后对它们进行迭代。

private final List<Supplier<String>> tasks = Arrays.asList(
this::doTask1, this::doTask2, this::doTask3
);
public boolean process() {
for (Supplier<String> task : tasks) {
if (task.get().equals("error")) {
return true;
} 
}
return false;
}

在这种情况下,简单的return语句也可以用作:

return doTask1().equals("error") || doTask2().equals("error") || doTaskN().equals("error");

之类的东西怎么样

public enum Status {
ERROR, TASK_1, ... TASK_N, END;
}
public boolean process() {
Status status = TASK_1;
while(status != ERROR && status != END) {
switch(status) {
case TASK_1: status = doTask1(); break;
.....
case TASK_N: status = doTaskN(); break;
}
return (status == ERROR);
}

最终,您可能需要一个带有do()方法的Task类,并且每个do()返回一个新的Task对象。但这可以被视为超越工程。

此外,查找术语";"有限状态机";

最新更新