5

声纳显示

使这个基于值的字段瞬态,使其不包含在此类的序列化中。

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

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

4

1 回答 1

6

要使基于值的类的字段非瞬态,基于值的类必须是可序列化的。所以这实际上不是你做出的设计决定。

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

我们不知道最终的值类型实现会是什么样子,但是应该采用 JRE 开发人员提供的迁移路径,例如在引入不可变列表时,基于值和可序列化,而不是假设有额外的超出规范的规则和约束。

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

于 2017-12-21T12:29:52.663 回答