我想在我的 java 程序中序列化一个非静态内部类。虽然这是不允许的,因为我的内部类(默认情况下)引用了它的外部类(在这种情况下是不可序列化的),所以如果我尝试序列化它,我会得到外部类的 NullPointerException。
那么有没有办法覆盖对外部类的引用并将其设置为瞬态,以便每次初始化都不会对其进行序列化并创建内部类的对象?
我想在我的 java 程序中序列化一个非静态内部类。虽然这是不允许的,因为我的内部类(默认情况下)引用了它的外部类(在这种情况下是不可序列化的),所以如果我尝试序列化它,我会得到外部类的 NullPointerException。
那么有没有办法覆盖对外部类的引用并将其设置为瞬态,以便每次初始化都不会对其进行序列化并创建内部类的对象?
您不能对封闭实例进行隐式引用transient
,但您可以做的是重新设计以使其成为嵌套(静态)类并在构造函数参数中显式传递封闭实例。然后,您需要在嵌套类中使用一个显式变量,您可以将其标记为transient
.
你不能:如果你的内部类不是static
,它的初始化状态取决于定义的外部类的实例。这是因为如果没有外部类的实例,您就无法获得内部类的实例。
并且由于外部类不是Serializable
,你不能序列化外部类的实例,因此你不能序列化内部类的实例。
或者只是使内部类静态并完成它......
自动序列化有一些负面的部分:如果您更改字段名称或更改字段的可见性,则反序列化将不起作用,更重要的是:它将“自动”保存更多空间对象。出于这个原因,我几乎总是手动序列化/反序列化类:写一个 int,写一个字符串而不是读回它。使用此方法,您可以根据需要编写非静态内部类反序列化