尝试多次添加列表的同一实例时发生java.lang.StackOverflowError [英] java.lang.StackOverflowError when trying to add the same instance of list multiple times

查看:85
本文介绍了尝试多次添加列表的同一实例时发生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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆