什么可以替代不序列化基于值的类,如LocalDateTime

时间:2018-02-16 19:57:20

标签: java serialization deserialization

让我们假设我们有一个实现Serializable的实体。在实体类中,我们有一个LocalDateTime字段。根据此Value-based classes规则,在反序列化的情况下可能会产生不可预测的结果。

因此,我们想将它们存储在http会话中,那么我的问题是在这种情况下可能的替代方案?

1 个答案:

答案 0 :(得分:2)

您要链接的页面是

  

如果尝试,程序可能会产生不可预测的结果   将两个引用区分为基于值的类的相等值...

因此,对这些类的对象进行序列化和反序列化通常没有问题。如果序列化,例如LocalDateTime并再次反序列化,则会得到一个与第一个对象相同的对象。这通常都是你需要的。

如果序列化两个对象并引用相同的 LocalDateTime,则可能会得到两个对象,引用两个相等但不同的LocalDateTime。或者反过来说,如果你通过引用两个不同但相等的LocalDateTime序列化两个对象,它们理论上可以返回对同一个对象的引用。

这意味着,在反序列化后,可能会出现意外结果,例如

if (myLocalDateTime == myOtherLocalDateTime)

你问

  

在这种情况下可能有什么选择?

替代方案是:始终将此类对象与.equals进行比较:

if (myLocalDateTime.equals(myOtherLocalDateTime))

然后你就安全了。