今天调试代码的时候,发现调试器里一个变量后面报了这样的错误:
Method threw 'java.lang.StackOverflowError' exception. Cannot evaluate xxx.toString()
但程序可以正常运行。
debug模式下调试器会调用这个对象的toString()方法,我是通过lombok的@Data注解来生成toString()方法的。而报错的原因就是我在定义类的时候用了双向的引用,举个例子就是:对象A引用了对象B,对象B又反过来引用了对象A,导致出现了一个环形的引用链,使用toString()方法时,会不断的互相循环调用引用对象的方法,导致栈溢出。
解决方法:
lombok给不需要加到toString的属性上加上@ToString(exclude = {“需要排除的属性名”})
@ToString(exclude = {"invoices","attachments"})
public class InvoicePack {
....
}
评论区