serialVersionUID应该是不同类的唯一吗?

时间:2014-01-17 09:19:19

标签: java serialization

class A implements Serializable{
    private static final long serialVersionUID = 5L;
    ...
}

class B implements Serializable{
    private static final long serialVersionUID = 6L;
    ...
}

然后有必要为这两个类提供唯一的serialVersionUID

那么我可以为这两个课程分配serialVersionUID = 5L吗?

我阅读了以下链接

Why generate long serialVersionUID instead of a simple 1L?

What is a serialVersionUID and why should I use it?

5 个答案:

答案 0 :(得分:14)

是的,你可以。不同类的串行版本是独立的,不会相互干扰。

PS
Eclipse甚至建议您将serialVersionID设置为默认值1L

答案 1 :(得分:6)

需要

serialVersionUID才能记住该类的版本。序列化和反序列化时应该相同。提供此值而不是JVM分配一个(通常是哈希)是一种很好的编程习惯。两个类没有必要具有唯一值。

答案 2 :(得分:1)

serialVersionUID可以是任何东西。

但是最佳做法是从最低的数字开始(例如0L),并在每次更改影响序列化的类时进行更新,例如添加/更新/删除字段,在这种情况下,您应该将版本号从0L增加到1L,依此类推。

答案 3 :(得分:0)

SerialVersionUUID是编译器用来序列化/反序列化对象的标识符。该ID是该课程的私人成员。

为每个可序列化的对象创建新的uuid可以很好地控制序列化/反序列化过程,但是在不同的类之间不必唯一。

答案 4 :(得分:-1)

是的,两个不同的类可能有相同的serialVersionUID变量。但是更喜欢为每个类使用唯一的一个。也可以使用8到10位长的一个而不是1作为值。