假设我有一个(非常简单的)递归方法,如下所示:

public static void myMeth(int n)
{
     // do something

     // now execute the recursive call
     if (n < 0) return;
     else if ( n == SOME_CONST ) throw new UnsupportedOperationException();
     else myMeth(n - 1);
}


(第二个条件n == SOME_CONST仅用于说明有时可能会发生异常,有时却不会发生异常)。

假设我调用了myMeth(10),并且在几次递归调用(例如SOME_CONST == 5)之后确实发生了异常。

我有什么办法可以做(使用try-catch块)使我回到myMeth的第一帧吗?

最佳答案

这可能行得通,可能有一个更清洁的解决方案,但这是一个开始:

public static void myMeth(int n, boolean firstCall)
{
     // do something

     // now execute the recursive call

     try
     {
         if (n < 0) return;
         else if ( n == SOME_CONST ) throw new UnsupportedOperationException();
         else myMeth(n - 1, false);
     }
     catch(UnsupportedOperationException e)
     {
         if (firstCall)
         {
              //logic
         }
         else
         {
              throw e;
         }
     }
}

关于java - 展开到Java递归调用的第一帧?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21171274/

10-12 16:03