如果我在我的应用程序的每个类上实现Serializable
,以便可以在Jboss集群环境中轻松运行应用程序。
现在如果我在我的课程中实现了Serializable
,那么eclipse会显示在下面的消息
serializable类不声明静态 long的最终serialVersionUID字段
现在它给了我三个选项
如果我先选择它会产生这样的
private static final long serialVersionUID = 1L;
如果我选择第二个,它会像这样生成
private static final long serialVersionUID = 1629728947486980072L;
第三,我们可以轻松忽略,因为我们必须在集群环境中运行应用程序,所以我们必须无论如何都要添加versionID What is a serialVersionUID and why should I use it?
现在正如我所说的那样,我必须实现每个系列化和非常类的哪个更好的方法。 Approach1或Appraoch2?
答案 0 :(得分:1)
serialVersionUID
构成一个合乎逻辑的负担:它应该小心维护。
它的隐式生成(编译器哈希方法签名等)是有限的。所以没有压制警告。
最佳版本应尽可能保持相同,并可能更新旧类定义的持久对象。
至少在新的类定义中,必须更改serialVersionUID 。
为了使更改更具吸引力,我使用日期时间形式的serialVersionUID yyyyMMddHHmm:
private static final long serialVersionUID = 201508171605L;
日期时间2015-08-17T16:05。
顺便说一句:申请下划线的好机会: private static final long serialVersionUID = 2015_08_17__16_05L;
这使得监督版UID更容易识别。
答案 1 :(得分:0)
序列化运行时与每个可序列化的类a关联 版本号,称为serialVersionUID,在此期间使用 反序列化以验证序列化的发送方和接收方 object已加载与该对象兼容的类 尊重序列化。如果接收器已加载了一个类 具有与其不同的serialVersionUID的对象 相应的发件人的类,然后反序列化将导致
InvalidClassException
。
因此,您可以将serialVersionUID
视为'哈希代码'你的班级因此,第二种方法肯定更好,因为第一种方法非常相似(几乎相同)将@SuppressWarings添加到' serial' 。
有关详细信息,请访问this blog。