今天用 idea debug 的时候,遇到一个错误:Method threw ‘java.lang.StackOverflowError’ exception. Cannot …

如图所示:

image

类结构如下:

public class Student {

    private Long id;

    private String name;

    private Classroom classroom;
    
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", classroom=" + classroom +
                '}';
    }
}
public class Classroom {

    private Long id;

    private List<Student> students;
    
    @Override
    public String toString() {
        return "Classroom{" +
                "id=" + id +
                ", students=" + students +
                '}';
    }
}

因为 debug 模式下需要显示变量信息,这个信息就是要调用 toString() 方法得到的。而我采用的结构是 1 对多的关系,对象互相引用,调用 toString() 方法的时候栈溢出了。

解决这个问题也很简单,修改任意一个类的 toString() 方法,不要造成循环调用就行。

public class Classroom {

    private Long id;

    private List<Student> students;

    @Override
    public String toString() {
        return "Classroom{" +
                "id=" + id +
                '}';
    }
    
}

image

原文链接:https://miansen.wang/2020/10/22/method-threw-stackoverflow-error/