Java中的复杂异常处理

时间:2017-11-28 10:46:08

标签: java exception exception-handling

在以下场景中,

public void fooMethod()
{
 try
 {
  methodToCall();

 }catch( FooException exception )
 {
  methodToCall();
 }
}


private int methodToCall() throws FooException
{
  throw new FooException();
}

我想调用methodToCall(例如)10次尝试成功。

由于catch块中没有异常被捕获,并且在上面给出的示例中,methodToCall总共被调用两次(一个在try块中,一个在catch块中。)

我应该如何设计代码,以便methodToCall被调用10次,即使它抛出给定的异常。

修改

实际的fooMethod比这复杂得多,我不能递归地调用它,因为其他几个作业都比这个try-catch子句之前完成。

2 个答案:

答案 0 :(得分:1)

public void fooMethod()
{
int counter = 0 ;
 while(counter < 10){
  try
   {
    methodToCall();
    counter = 11;
   }catch( FooException exception )
   {
     counter++;
   }

}
}

答案 1 :(得分:1)

for循环将确保进行10次调用。 try catch将阻止退出循环。

public void run10TimesWhatsoever() {
    for(int i = 0; i < 10; ++i) {
        try {
          methodToCall();
        } catch (final FooException ignore) {
        }
    }
}

但是,如果你想在MOST打10次并在成功时停止,你可以使用类似的东西

public void attemptUpTo10Times() {
    for(int i = 0; i < 10; ++i) {
        try {
            methodToCall();
            break; // exit the loop if no exception were thrown
        } catch (final FooException ignore) {
            if (i == 9) {
                throw new IllegalStateException("Failed 10 times in a row");
            }
        }
    }
}