0

我想在我的 java 程序中序列化一个非静态内部类。虽然这是不允许的,因为我的内部类(默认情况下)引用了它的外部类(在这种情况下是不可序列化的),所以如果我尝试序列化它,我会得到外部类的 NullPointerException。

那么有没有办法覆盖对外部类的引用并将其设置为瞬态,以便每次初始化都不会对其进行序列化并创建内部类的对象?

4

3 回答 3

2

您不能对封闭实例进行隐式引用transient,但您可以做的是重新设计以使其成为嵌套(静态)类并在构造函数参数中显式传递封闭实例。然后,您需要在嵌套类中使用一个显式变量,您可以将其标记为transient.

于 2013-01-09T18:11:29.990 回答
2

你不能:如果你的内部类不是static,它的初始化状态取决于定义的外部类的实例。这是因为如果没有外部类的实例,您就无法获得内部类的实例。

并且由于外部类不是Serializable,你不能序列化外部类的实例,因此你不能序列化内部类的实例。

或者只是使内部类静态并完成它......

于 2013-01-09T18:13:35.660 回答
0

自动序列化有一些负面的部分:如果您更改字段名称或更改字段的可见性,则反序列化将不起作用,更重要的是:它将“自动”保存更多空间对象。出于这个原因,我几乎总是手动序列化/反序列化类:写一个 int,写一个字符串而不是读回它。使用此方法,您可以根据需要编写非静态内部类反序列化

于 2013-01-09T18:13:15.570 回答