Java中的非静态内部类和序列化有什么问题

6 java performance serialization

今天早上,在尝试使用Web应用程序诊断性能问题时,我和我的老板对此进行了长时间的讨论.我们并没有真正得出任何结论.

我认为我们认为Serializable非静态内部类有问题是正确的,但我们不确定究竟是什么问题或者究竟要避免什么(我们推断我们不能总是简单地避免它).任何人都可以建议任何没有遇到这个问题的指导方针吗?

kdg*_*ory 7

内部类包含对其外部类的引用,因此尝试序列化内部也将序列化外部 - 以及外部可能包含的任何其他对象.这可能会产生巨大的对象图.如果外部具有无法序列化的状态(例如InputStream对象),则可能会失败.

也就是说,有时你必须使内部类Serializable,即使你从来没有计划序列化它们.例如,如果您正在使用Swing.

如果你计划序列化这些对象,我会问为什么他们需要成为内部类而不管性能如何.通常,您只是要序列化数据容器,而这些容器很少(如果有的话)需要引用某些"父"类.考虑使这些对象嵌套(静态)类而不是内部类.