这个serialVersionUID是通用版本标识符吗?

时间:2015-09-09 08:00:24

标签: java eclipse serialization java-io

如果我使用Eclipse IDE生成的默认serialVersionUID如下

static final long serialVersionUID = 1L;

怎样才能成为通用版? 如果是这样,为什么?它怎么能成为通用版? 有人解释!

1 个答案:

答案 0 :(得分:1)

Javadocs解释得很好:

  

序列化运行时与每个可序列化的类a关联   版本号,称为serialVersionUID,在此期间使用   反序列化以验证序列化的发送方和接收方   object已加载与该对象兼容的类   尊重序列化。如果接收器已加载了一个类   具有与其不同的serialVersionUID的对象   相应的发件人类,然后反序列化将导致   InvalidClassException。可序列化的类可以声明它自己的类   serialVersionUID通过声明一个名为的字段显式地显示   “serialVersionUID”必须是static,final和long类型:

     

ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;

     

如果可序列化类没有显式声明a   serialVersionUID,然后序列化运行时将计算一个   基于各个方面的该类的默认serialVersionUID值   该类的类,如Java(TM)对象序列化中所述   规格。但是,强烈建议所有人   可序列化类显式声明serialVersionUID值,因为   默认的serialVersionUID计算对类非常敏感   细节可能因编译器实现而异,并且可以   因此导致意外的InvalidClassExceptions期间   反序列化。因此,要保证一致的serialVersionUID   不同java编译器实现的值,可序列化   class必须声明一个显式的serialVersionUID值。也是   强烈建议显式serialVersionUID声明使用   尽可能使用私有修饰符,因为此类声明仅适用于   立即声明的类 - serialVersionUID字段不是   作为继承成员有用。

同样好的阅读:Always Declare Serial Version Uid