在我的很多数据库实体中,我存储了各种值的序列化哈希映射。内置的java hashmap类有多大可能会改变serialVersionUID,因此我无法再从数据库中反序列化哈希映射?
新版本的Java版本会发生这种情况吗?
答案 0 :(得分:2)
新版本的Java版本会发生这种情况吗?
如果发生任何事情,它会:),但严重的是,如果他们确实更改了serialVersionUID,他们会将其设置为向后兼容 - 这些年来可能没有发生的事情。
JDK 6二进制不兼容性: http://www.oracle.com/technetwork/java/javase/compatibility-137541.html#incompatibilities
JDK 5二进制不兼容性: http://java.sun.com/j2se/1.5.0/compatibility.html#incompatibilities
JDK 1.4二进制不兼容性: http://java.sun.com/javase/compatibility_j2se1.4.html#incompatibilities1.4
JDK 1.3二进制不兼容性: http://java.sun.com/j2se/1.3/compatibility.html#incompatibilities1.3
JDK 1.2二进制不兼容性:http://java.sun.com/products/archive/j2se/1.2.2_017/compatibility.html#incompatibilities1.2
上面列出的所有可序列化不兼容性均适用于'default'serialVersionUID
答案 1 :(得分:1)
可能但不太可能。 Java对象序列化规范定义了serialVersionUID生成的精确算法(第4章 - http://download.oracle.com/javase/6/docs/platform/serialization/spec/class.html#4100),并且还解释了类型版本控制如何工作以及什么被认为是兼容类型演变(第5章 - http://download.oracle.com/javase/6/docs/platform/serialization/spec/version.html)。
回到你的问题。如果新的Java版本在HashMap定义中引入了向后不兼容的更改,它将带有一个新的序列化UID。 Java 5清楚地显示了Java的向后兼容性意味着什么 - 看看泛型类型如何带有类型擦除。我觉得你很安全。可能发生的最糟糕的事情是看到HashMap已弃用:)但我相信它仍然是兼容的。
答案 2 :(得分:0)
你不是'非常安全'。在其中一个RowSet实现的情况下,它已经发生了,并且不能保证不会发生整个Swing。
然而,对核心类来说,它确实不太可能。