我收到了这个例外。
Exception in thread "main" java.lang.StackOverflowError
at java.util.AbstractCollection.<init>(AbstractCollection.java:66)
at java.util.AbstractList.<init>(AbstractList.java:76)
at java.util.ArrayList.<init>(ArrayList.java:151)
这是否意味着一个类不能包含其自身的对象作为变量?但是在链表实现中,节点可以包含指向自身的节点吗?
public class Test {
String name;
List<Test> related;
public Test() {
name = "dog";
related = new ArrayList<Test>();
related.add(new Test());
related.add(new Test());
related.add(new Test());
}
public List<Test> relate() {
return related;
}
public String toString() {
return name;
}
public static void main(String[] args) {
Test test = new Test();
for(Test t : test.relate()) {
System.out.println(t);
}
}
}
最佳答案
您可以通过在构造函数中添加一个参数来解决问题,该参数指定要添加的元素数量,这表明问题是代码中的无限递归,而不是在构造函数中创建新实例所固有的问题:
import java.util.ArrayList;
import java.util.List;
public class Test {
String name;
List<Test> related;
public Test(int numberToAdd) {
name = "dog";
related = new ArrayList<Test>();
for (int i = 0; i < numberToAdd; i++) {
related.add(new Test(0));
}
}
public List<Test> relate() {
return related;
}
public String toString() {
return name;
}
public static void main(String[] args) {
Test test = new Test(3);
for (Test t : test.relate()) {
System.out.println(t);
}
}
}