我确实有一个无法理解的问题,我正在计划一场完美的海战,我想实现一个二进制序列化功能,以便能够加载/保存游戏。我测试了它的工作原理。我的类中的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()从未被调用过!
“ Bateau”对象包含一个集合,并且该集合包含整个Bateau。要toString集合,默认暗示toStrings里面的每个元素,并因此调用您的bateau上的toString,.. toStrings集合,最后到bateau中toString(),这是一个无限循环。
NB:使用toString进行序列化不起作用。 toString仅用于调试目的。