如果我使用Eclipse IDE生成的默认serialVersionUID,如下所示
static final long serialVersionUID = 1L;它怎么可能是通用版本呢?如果有,原因何在?它怎么可能是通用版本呢?有谁能解释一下!
发布于 2015-09-09 16:04:00
Javadocs很好地解释了这一点:
序列化运行时将一个版本号(称为serialVersionUID )与每个可序列化类相关联,该版本号在反序列化期间用于验证序列化对象的发送方和接收方是否已为该对象加载了与序列化兼容的类。如果接收方为对象加载的类具有与相应发送方的类不同的serialVersionUID,则反序列化将导致InvalidClassException。可序列化的类可以通过声明一个名为" serialVersionUID“的字段来显式声明它自己的serialVersionUID,该字段必须是静态的、最终的和类型为long的:
任意访问修饰符静态最终长serialVersionUID = 42L;
如果可序列化类没有显式声明serialVersionUID,则序列化运行时将根据类的各个方面计算该类的默认Java值,如Java对象序列化规范中所述。但是,强烈建议所有可序列化的类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类细节高度敏感,这些细节可能因编译器实现而异,因此在反序列化过程中可能会导致意外的InvalidClassExceptions。因此,为了在不同的java编译器实现中保证一致的serialVersionUID值,可序列化的类必须声明显式的serialVersionUID值。还强烈建议显式serialVersionUID声明尽可能使用private修饰符,因为此类声明仅适用于直接声明的类--serialVersionUID字段作为继承的成员并不有用。
同样值得一读的是:Always Declare Serial Version Uid
https://stackoverflow.com/questions/32474082
复制相似问题