尝试多次添加列表的同一实例时发生java.lang.StackOverflowError [英] java.lang.StackOverflowError when trying to add the same instance of list multiple times
本文介绍了尝试多次添加列表的同一实例时发生java.lang.StackOverflowError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何为以下代码解析java.lang.StackOverflowError
?
Person.java
import java.util.List;
public class Person {
private String name;
private List<Person> children;
public Person() {
}
public Person(String name, List<Person> children) {
this.name = name;
this.children = children;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Person> getChildren() {
return children;
}
public void setChildren(List<Person> children) {
this.children = children;
}
@Override
public String toString() {
return "Person [name=" + name + ", children=" + children + "]";
}
}
TestPerson.java
import java.util.ArrayList;
import java.util.List;
public class TestPerson {
public static void main(String[] args) {
List<Person> emptylist = new ArrayList<Person>();
Person p3 = new Person("X", emptylist);
Person p2 = new Person("Y", emptylist);
Person p1 = new Person("Z", emptylist);
p2.getChildren().add(p3);
p1.getChildren().add(p2);
System.out.println(p1);
}
}
推荐答案
所有的Parent实例具有相同的子代列表,因为您构造了一个ArrayList并将其用作所有三个Person的子代.因此,您具有递归数据结构.为每个人创建一个不同的列表.
All your Parent instances have the same list of children, since you construct a single ArrayList and use it as the children of all three Person. So you have a recursive data structure. Create a different list for each person.
这篇关于尝试多次添加列表的同一实例时发生java.lang.StackOverflowError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文