Java 中的复杂异常处理

Sophisticated exception handling in Java

在下面的场景中,

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 子句之前还完成了其他几项工作。

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

}
}

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

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

但是,如果您想最多调用 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");
            }
        }
    }
}