我有一个作业列表
,需要执行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/