侧边栏壁纸
  • 累计撰写 56 篇文章
  • 累计创建 59 个标签
  • 累计收到 7 条评论

调用toString方法会StackOverflowError的原因和解决方案

时间这孩子很诚实
2022-05-06 / 0 评论 / 1 点赞 / 156 阅读 / 458 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

今天调试代码的时候,发现调试器里一个变量后面报了这样的错误:

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 {
 ....
 }
1

评论区