java - 从 Java 5 开始不再需要 serialVersionUID?

标签 java serialization serialversionuid

我最近读到一条评论说从 Ja​​va 5 开始不再需要使用 serialVersionUID 来使同一类的不同版本兼容序列化/反序列化。它是否正确?也许它与协变返回类型混淆了。所以想和大家一起检查一下。

最佳答案

JavaDocs for Java 5仍然声明需要它:

If a serializable class does not explicitly declare a serialVersionUID, then the serialization runtime will calculate a default serialVersionUID value for that class based on various aspects of the class, as described in the Java(TM) Object Serialization Specification. However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization. Therefore, to guarantee a consistent serialVersionUID value across different java compiler implementations, a serializable class must declare an explicit serialVersionUID value. It is also strongly advised that explicit serialVersionUID declarations use the private modifier where possible, since such declarations apply only to the immediately declaring class--serialVersionUID fields are not useful as inherited members.

关于java - 从 Java 5 开始不再需要 serialVersionUID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7385049/

相关文章:

java - 检查字符串是否与 mySQL 兼容 UTF-8

java - Oozie 构建失败无法锁定存储构建/测试/数据/dfs/name1。该目录已被锁定

java - JSF 支持 bean 应该是可序列化的?

java - 负 serialVersionUID?

java - 读取类的方法并将 Web 服务的路径名存储在 arraylist 中

java - 将 JButton 重绘限制为状态更改?

c++ - 计算Qt中对象的序列化大小

java - Gson自定义序列化

python - pickle 对象版本控制