java - 从循环内调用的方法跳出 for 循环

标签 java loops for-loop iteration break

我有一个作业列表,需要执行x步(比如5步)。每个步骤都必须成功才能继续,如果任何步骤失败,则必须提出票据,并且必须放弃当前作业的执行并继续下一个作业

这就是我目前拥有的(它就像一个魅力)。

for(Job aJob: jobs){
    // Step 1
    try{
        Obj objRet1 = method1();
        // use objRet1;
    }
    catch(Exception e){
        raiseTicket(errMsg1,e);
        break;
    }

    // Step 2
    try{
    Obj objRet2 =   method2();
    // use objRet2;
    }
    catch(Exception e){
        raiseTicket(errMsg2,e);
        break;
    }

    // Step 3
    try{
    Obj objRet3 = method3();
    // use objRet3;
    }
    catch(Exception e){
        raiseTicket(errMsg3,e);
        break;
    }

    ...

    // Step 5
}

在我看来,这不是很优雅且易于阅读。我想将其压缩为如下所示。

for(Job aJob: jobs){
    step1();
    step2();
    ..
    step5();
}

step1(){
    try{
        ...
    }
    catch(Exception e){
        raiseTicket(errMsg1,e);
        break;
    }
}

step2(){
}
...

有人可以阐明如何改进这个程序吗?请注意,返回一个值或将其存储在方法参数中也可能不起作用,因为我在这里试图实现的是避免中断执行所需的样板代码并将它们整齐地打包在一个可读的方法。

最佳答案

如果发生错误,您可以做的是在每个步骤中抛出一个已检查的异常,然后在 for 循环中捕获该已检查的异常。像这样的事情:

class StepException extends Exception {...}

for (Job aJob: jobs) {
  try {
     step1();
     step2();
     ...
     step5();
  } catch (StepException se) {
     // do something, e.g. print error to console
     // the for loop will keep going when this occurs
  }
}

step1() throws StepException {
   try {
      ...
   } catch (Exception e) {
      raiseTicket(...);
      throw new StepException(e);
   }
}

// similar to step2(), ..., step5()

关于java - 从循环内调用的方法跳出 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43361209/

相关文章:

java - Tomcat JVM - 在堆内存统计之后增加哪个内存参数

java - Flink : Trigger. onElement 工作

java - Java中 "final class"有什么意义?

javascript - for 循环只改变第一次

java - 在 map 中寻找 key

R Shiny : How to have sequential Modals in for loop

r - 确定集群相似度/集合重叠

java - 在JSP页面中打印一个 "tree"结构

loops - 第一列的数据丢失

R For循环删除从一个字符串到列中第二个字符串的行范围