我遇到了与错误递归和StackOverflowError相关的编程问题。 我在一个单独的帖子中得到了这个案例:
public void subscribe(final String channel) {
try {
// blocking command
client.subscribe(channel);
} catch(ConnectionException e) {
subscribe(channel);
}
}
假设此ConnectionException仅定期发生(类似于每分钟)。几百之后,我显然得到了StackOverflowError。
我知道发生了什么,但我不知道如何解决这个问题(即在不增加调用堆栈的情况下静默重新订阅)。有什么想法吗?
答案 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
}
}
}