今天早上,在尝试诊断 Web 应用程序的性能问题时,我的老板和我就此进行了长时间但最终毫无结果的讨论。我们并没有真正得出任何结论。
我认为我们认为 Serializable 非静态内部类存在问题是正确的,但我们不确定到底是什么问题或究竟要避免什么(我们推断我们不能总是 简单地避免它)。任何人都可以提出任何避免在这个问题上遇到麻烦的指导方针吗?
最佳答案
内部类持有对其外部类的引用,因此尝试序列化内部类也会序列化外部类——以及外部类可能持有的任何其他对象。这可能会导致一个巨大的对象图。或者它可能会失败,如果外部具有无法序列化的状态(例如 InputStream 对象)。
就是说,有时您必须使内部类可序列化,即使您从未打算序列化它们。例如,如果您使用 Swing。
如果您打算序列化这些对象,我会质疑为什么它们需要成为内部类而不考虑性能。通常,您只打算序列化数据容器,而此类容器很少(如果有的话)需要对某些“父”类的引用。考虑使这些对象成为嵌套(静态)类而不是内部类。
关于java - Java中的非静态内部类和序列化有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1213627/