线程“ AWT-EventQueue-0”中的异常java.lang.StackOverflowError,对String()造成问题[重复]

问题描述 投票:0回答:1

我确实有一个无法理解的问题,我正在计划一场完美的海战,我想实现一个二进制序列化功能,以便能够加载/保存游戏。我测试了它的工作原理。我的类中的toString()函数似乎正在我的程序中运行,即使我创建了一个新的部分(因此不是来自二进制文件而是新的),这是错误:

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
[...]
at caseGrille.CaseBateau.toString(CaseBateau.java:25)
at java.base/java.lang.String.valueOf(String.java:2951)
at java.base/java.lang.StringBuilder.append(StringBuilder.java:168)
at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:473)
at caseGrille.Bateau.toString(Bateau.java:44)
at java.base/java.lang.String.valueOf(String.java:2951)
at java.base/java.lang.StringBuilder.append(StringBuilder.java:168)
at caseGrille.CaseBateau.toString(CaseBateau.java:25)
at java.base/java.lang.String.valueOf(String.java:2951)
at java.base/java.lang.StringBuilder.append(StringBuilder.java:168)
at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:473)
at caseGrille.Bateau.toString(Bateau.java:44)
at java.base/java.lang.String.valueOf(String.java:2951)
at java.base/java.lang.StringBuilder.append(StringBuilder.java:168)
at caseGrille.CaseBateau.toString(CaseBateau.java:25)
at java.base/java.lang.String.valueOf(String.java:2951)
at java.base/java.lang.StringBuilder.append(StringBuilder.java:168)
at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:473)
at caseGrille.Bateau.toString(Bateau.java:44)

这很奇怪,因为当我删除toString()函数时,一切工作正常。而且,除了序列化之外,我的toString()从未被调用过!

java serialization tostring
1个回答
0
投票

“ Bateau”对象包含一个集合,并且该集合包含整个Bateau。要toString集合,默认暗示toStrings里面的每个元素,并因此调用您的bateau上的toString,.. toStrings集合,最后到bateau中toString(),这是一个无限循环。

NB:使用toString进行序列化不起作用。 toString仅用于调试目的。

© www.soinside.com 2019 - 2024. All rights reserved.