Serializable的SerialVersionUID

时间:2011-11-11 20:55:34

标签: java serializable

我正在实现更多扩展Serializable接口的类。 我知道提及serialVersionUID的值是件好事。

private static final long serialVersionUID = 1024L;

所以,鉴于我将使用所有这些类,我应该为每个类的serialVersionUID赋予相同的值,或者相​​反,它们必须是不同的?

谢谢。

4 个答案:

答案 0 :(得分:4)

它们不必是不同的,也不必相同。它仅用于确保某个序列化对象可以被该类反序列化。基本上,如果您更改了序列化类的代码,您还应该更改此值。

答案 1 :(得分:3)

一个类的serialVersionUID与另一个类的serialVersionUID完全没有关系。一个必然结果是,一个类的{{1}}对另一个类的{{1}}绝对没有效果

因此,如果您愿意,可以对所有类使用相同的类,并在任何类更改时批量更新它们。您应该了解它必须具备的含义。

答案 2 :(得分:2)

关键是如果您稍后在使用原始格式生成新序列化格式incompatible的问题中更改了类,则必须更改serialVersionUID。除此之外,您可以为该字段使用任何值。

答案 3 :(得分:2)

由于您已将其声明为私有,因此该值对于此类是唯一的,并且它是唯一的,而不是继承的值。

http://docs.oracle.com/javase/1.5.0/docs/api/java/io/Serializable.html

将此值更改为此类中将来的任何其他值将在尝试反序列化旧对象时给出invalidclassexception。

干杯!