java.lang.StackOverflowError的.为什么我在这里得到Stackoverflow异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java.lang.StackOverflowError的.为什么我在这里得到Stackoverflow异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1632字,纯文字阅读大概需要3分钟。
内容图文
![java.lang.StackOverflowError的.为什么我在这里得到Stackoverflow异常](/upload/InfoBanner/zyjiaocheng/744/ce9c4376a67a444ea99b87e199144d12.jpg)
我有一个父级和子级项目列表,以层次结构显示.我想切换他们扩展的财产.因此,如果单击父级并且父级的子级正在显示,则所有父级子级将被折叠,反之亦然
Stackoverflow跟踪指向此行
if (childItem.getItemId() == item.getItemId()) {
hideItemAndDescendants(childItem); //causing stack overflow
}
我认为当一个方法一直无限地调用它时会发生堆栈溢出.但是在这种情况下,我有一个For循环,只循环遍历项目列表,列表大小只有10左右.
public boolean toggleNodeCollapseState(long itemId) {
boolean changed = false; // a flag to determine if anything collapsed or expanded
for (int i = 0; i < items.size(); i++) {
Item childItem = items.get(i);
if (childItem.getParentItemId() == itemId) {
changed = true;
childItem.setCollapsed(!childItem.isCollapsed());
if (childItem.isCollapsed()) {
hideItemAndDescendants(childItem);
} else {
showDescendants(childItem);
}
}
}
return changed;
}
public void hideItemAndDescendants(Item item) {
item.hide();
for (int i = 0; i < items.size(); i++) {
Item childItem = items.get(i);
if (childItem.getItemId() == item.getItemId()) {
hideItemAndDescendants(childItem);
}
}
}
public void showDescendants(Item item) {
item.hide();
for (int i = 0; i < items.size(); i++) {
Item childItem = items.get(i);
if (childItem.getItemId() == item.getItemId()) {
childItem.show();
if (!childItem.isCollapsed()) {
showDescendants(childItem);
}
}
}
}
解决方法:
你在hideItemAndDecendants中有一个递归调用:
for (int i = 0; i < items.size(); i++) {
Item childItem = items.get(i);
if (childItem.getItemId() == item.getItemId()) {
hideItemAndDescendants(childItem);
}
}
因此,如果childItem.getItemId()== item.getItemId(),则调用hideItemAndDescendants(childItem);再次.这可能会导致无限循环导致stackoverflowexception.
内容总结
以上是互联网集市为您收集整理的java.lang.StackOverflowError的.为什么我在这里得到Stackoverflow异常全部内容,希望文章能够帮你解决java.lang.StackOverflowError的.为什么我在这里得到Stackoverflow异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。