如果应用程序从不依赖其对象身份,是否可以序列化基于值的对象?

Is it ok to Serialize Value based objects if the application never relies on its object identity?

声纳显示

Make this value-based field transient so it is not included in the serialization of this class.

当基于价值的 class 发布时,这是一个面向未来的错误。

那么,如果应用程序从不依赖其对象标识,我能否使基于值的对象成为非瞬态对象?

要使基于值的 class 的字段成为非瞬态的,基于值的 class 必须是可序列化的。所以这其实不是你做的设计决定。

如果设计者声明 class 是基于值的并实现 Serializable,他们假设基于值的 classes 和序列化是兼容的并且将保持兼容。

我们不知道最终的值类型实现会是什么样子,但是 JRE 开发人员提供的迁移路径,例如在引入 the immutable lists, being value based and serializable 时,应该采取,而不是假设有超出规范的额外规则和约束。

毕竟,没有理由认为序列化不适用于值类型。它也支持原始值,并且在过去也进行了调整,例如添加 enum 支持时。目前尚不清楚它是否会始终存储值,或者仍然像普通对象一样支持反向引用,或者执行完全不同的规范化,但只要你不依赖对象身份,就像你的前提一样,你就在安全的一面,因为任何一种策略都适用于您的代码。