可能重复:
Why should I bother about serialVersionUID?
我正在处理一些异常处理代码,我看到了一个名为serialVersionUID的代码。这个uid是用来做什么的??它是仅限于异常还是可以在所有类中使用?这个id的优点是什么?
发布于 2011-08-25 16:45:34
serialVersionUID
是用于定义特定类的版本的字段,而seriializing
& deseriializing
..考虑这样一个场景,您有一个类Employee
,它有3个字段已经投入生产一段时间了(这意味着可能存在许多序列化版本的employee对象),当您更新该类以包含(比方说第四个字段)时,所有以前的类(序列化的)都不能被强制转换或反序列化为新的类&您将得到一个异常。
为了避免这个问题,您可以使用serialVersionUID
字段来告诉JVM
新类实际上是一个不同的版本(通过更改serialVersionUID
)。
@Farmor
& @Tom Jefferys
说的差不多,但是举个例子,事情看起来要简单得多。
发布于 2011-08-25 16:37:51
它用于序列化,应该在任何实现Serializable
的类中声明它。
它实际上是JVM可以用来检查序列化类是否与您试图将其反序列化成的类定义相匹配的版本号。
这里有更多信息:http://download.oracle.com/javase/1,5.0/docs/api/java/io/Serializable.html
发布于 2011-08-25 16:38:11
这是为了确定它们是否具有可序列化和可反序列化的兼容性,如果它们具有相同的serialVersionUID
,并且都实现了Serializable
,则它们是兼容的。
而且它并不仅限于异常,正如您将注意到的那样,如果eclipse实现了Serializable
,那么它很容易将serialVersionUID
放在普通java类的前面。
已编辑:已更新,以包含@Spychos对Serializable
接口的正确评论。
https://stackoverflow.com/questions/7187302
复制相似问题