从Java 5开始不再需要serialVersionUID?

shr*_*000 1 java serialization serialversionuid

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

Nic*_*lai 5

在对Java 5的JavaDoc还指出,它需要:

如果可序列化类未显式声明serialVersionUID,则序列化运行时将基于类的各个方面计算该类的默认serialVersionUID值,如Java(TM)对象序列化规范中所述.但是,强烈建议所有可序列化类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类细节高度敏感,这些细节可能因编译器实现而异,因此在反序列化期间可能导致意外的InvalidClassExceptions.因此,为了保证跨不同java编译器实现的一致的serialVersionUID值,可序列化类必须声明显式的serialVersionUID值.强烈建议显式serialVersionUID声明尽可能使用private修饰符,因为此类声明仅适用于立即声明的类 - serialVersionUID字段作为继承成员无用.

  • 即使是[Java 7 docs](http://download.oracle.com/javase/7/docs/api/java/io/Serializable.html)也有相同的免责声明. (4认同)