我有一個List
jobs
需要x個步驟(比如5)。每個步驟必須成功才能繼續,如果任何步驟失敗,則必須提出票證,並且必須放棄執行當前job
並繼續執行下一個job
。從循環內調用的方法打破循環
這就是我目前的(它的工作原理就像一個魅力)。
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(){
}
...
有人可以拋出一些關於如何改善這個計劃?請注意,返回值或將其存儲在方法參數中也可能不起作用,因爲試圖在此實現的目標是避免執行break
所需的鍋爐代碼,並將它們整齊地打包在一個可讀的方法中。
我喜歡這個解決方案。我看到Dat Nguyen也提出了同樣的答案。因此看起來像它的一個常見問題,並且有解決它的設計模式。 –
我可以問,爲什麼使用RuntimeException而不是檢查異常? –
'StepExecutionException'是一個檢查異常:)看到這個SO線程的一些更多信息:http://stackoverflow.com/questions/6115896/java-checked-vs-unchecked-exception-explanation –