Java内置类(比如HashMap)是否会更改它们的serialVersionUID?

5

在我的很多数据库实体中,我存储了各种值的序列化哈希映射表。Java内置的HashMap类更改serialVersionUID的可能性有多大,这样我就无法从数据库中反序列化哈希映射表?

新的Java版本发布是否会引发此问题?

3个回答

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 上述所有可序列化的不兼容性都是针对“默认”的serialVersionUID。

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被弃用:),但我相信它仍然是兼容的。


0

你并不是“完全安全”的。在一个RowSet实现的情况下,这种情况已经发生过了,并且不能保证在整个Swing中不会再次发生。

然而,对于核心类来说,这仍然是高度不太可能的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接