序列化和不可变对象

2022-09-03 00:34:23

我有一个用于不可变用途的类,因此我想标记所有字段。final

但是,该类被序列化和反序列化以通过网络发送。为此,需要一个空构造函数。这可以防止我创建最终字段。

我确信这是一个相当普遍的问题,但我找不到解决方案。我应该如何继续?


答案 1

不需要无参数构造函数。派生最多的不可序列化类确实需要一个可用于派生最少可序列化类的无 arg 构造函数。

如果需要更改 中的字段,则通过 和 使用串行代理。readObjectreadResolvewriteReplace


答案 2

在典型的序列化情况下,不需要类具有空构造函数或非最终字段即可序列化。

现在,如果您必须自己进行序列化,或者需要对未实现 Serializable 的类进行子类,那就另当别论了。

因此,您需要提供一些有关如何遇到问题的更多详细信息。