如果我使用Eclipse IDE生成的默认serialVersionUID如下
static final long serialVersionUID = 1L;
怎样才能成为通用版? 如果是这样,为什么?它怎么能成为通用版? 有人解释!
答案 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字段不是 作为继承成员有用。