如何在这个错误的递归示例中解决此StackOverflowError?

时间:2013-06-01 08:05:47

标签: java recursion stack-overflow

我遇到了与错误递归和StackOverflowError相关的编程问题。 我在一个单独的帖子中得到了这个案例:

public void subscribe(final String channel) {
   try {
      // blocking command
      client.subscribe(channel);
   } catch(ConnectionException e) {
      subscribe(channel);
   }
}

假设此ConnectionException仅定期发生(类似于每分钟)。几百之后,我显然得到了StackOverflowError。

我知道发生了什么,但我不知道如何解决这个问题(即在不增加调用堆栈的情况下静默重新订阅)。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

现在你有一个infite递归。 放一个递归破坏条件。你需要有一个条件,递归应该停止。放置一个if块并在逻辑上停止递归。

答案 1 :(得分:1)

为什么不使用像他这样的简单循环?

public void subscribe(final String channel) {
   while(true){
       try {
          // blocking command
          client.subscribe(channel);
          return;
       } catch(ConnectionException e) {
          // ignored
       }
   }
}