声纳表演
使此基于值的字段处于瞬态状态,以便它不包含在
此类的序列化。
当基于值的类将被释放时,这是一个面向未来的错误。
因此,如果应用程序从不依赖于其对象标识,我可以使基于值的对象成为非瞬态对象吗?
最佳答案
要使基于值的类的字段成为非瞬态,基于值的类必须可序列化。因此,这实际上是您没有做出的设计决定。
如果设计人员声明一个基于值的类并实现Serializable
,则他们将假定基于值的类和序列化是兼容的,并且将保持兼容。
我们不知道最终值类型的实现会是什么样子,但是JRE开发人员提供的迁移路径例如在引入the immutable lists, being value based and serializable时,应该采用,而不是假设存在超出规范的其他规则和约束。
毕竟,没有理由假设序列化不适用于值类型。它也支持原始值,并且在过去也进行了修改,例如添加enum
支持时。目前尚不清楚它是否将始终存储值,还是仍然像普通对象一样支持反向引用或执行完全不同的规范化,但是只要您不像以前那样依赖对象标识,就可以安全起见,因为这两种策略都可以与您的代码一起使用。