发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA

用Compsite模式实现树形结构时的堆栈溢出异常

2002-11-21 17:01
赞助商链接

我用Composite模式实现树形结构时碰到如下问题:在初始化树时,如果遍历非根节点,并向其上添加孩子节点时总会出现堆栈溢出的错误,具体代码如下:

Public class Composite {
......
protected int id;
protected List children = new ArrayList();

public int getID() {
return this.id;
}

public Iterator getChildren() {
return this.children.iterator();
}

public int getSize() {
return this.children.size();
}

public void add(Composite c) {
try {
this.children.add(c);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}


/**
* Adds a child to the tree.
*
* @param parent the parent to add the new value to.
* @param child new value to add to the tree.
*/
public void addChild(Composite parent, Composite child) {
int parentID = parent.getID();
int childID = child.getID();

if(this.getID() == parentID) {
this.add(child);
}
else {
if(getSize()<1) {
throw new IllegalArgumentException("Parent key " + parentID +
" not found when adding child " + childID + ".");
}
else {
Iterator it = this.getChildren();
Composite node = null;
while(it.hasNext()) {
node = (Composite)it.next();
addChild(node,child);
}
}
}
}
......
}

当执行初始化调用addChild()方法时,总会出现如下异常

java.lang.StackOverflowError, stack: java.lang.StackOverflowError
at java.util.AbstractList$Itr.<init>(AbstractList.java:391)
at java.util.AbstractList$Itr.<init>(AbstractList.java:391)
at java.util.AbstractList.iterator(AbstractList.java:333)
at com.si_tech.nsd.util.tree.Composite.getChildren(Composite.java:101)
at com.si_tech.nsd.util.tree.Composite.addChild(Composite.java:168)

也就是说,对非根节点调用getChildren()方法时发生了堆栈溢出错误,这是为什么???

2002-11-22 09:10

大家发现了么?

2002-11-22 11:27

addchild要catch exception
这属于运行的error,你需要具体自己调试。

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系反馈 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com