private static final long serialVersionUID = 1L;

tjzero_sapce 2009-01-08 08:50:46
每创建一个class 的实体类 或者创建一个Servlet的时候 都会在类名或者Servlet 下面有一个黄色警告 点击了左边的警告牌 说要我创建一个什么ID 号 我创建了 之后 就自动生成了一个
/**
*
*/
private static final long serialVersionUID = 1L;
黄色的警告也就随之消失了 这个东西是干嘛用的呢?
...全文
1224 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gong67890 2012-06-26
  • 打赏
  • 举报
回复
serialVersionUID作用:
序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。

你可以随便写一个,在Eclipse中它替你生成一个,有两种生成方式:
一个是默认的1L,比如:private static final long serialVersionUID = 1L;
一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:private static final long serialVersionUID = -8940196742313994740L;之类的。
Eclipse提示The serializable class XXX does not declare a static final serialVersionUID field of type long
那是Eclipse提供这个提示功能给你吧.
你点它warning的icon两下Eclipse就会自动给定.
如果你不喜欢,可以把它关掉,
windows -> preferences -> compiler -> Error/Warnings
-> Potential Programming problems
将Serializable class without serialVersionUID的warning改成ignore.

其实如果你没有考虑到兼容性问题时,那就把它关掉吧.
其实有这个功能是好的.
只要任何类别实作了Serializable这个介面,
如果没有加入serialVersionUID,Eclipse都会给你warning提示,
这个serialVersionUID为了让该类别Serializable後兼容.

考虑一下,如果今天你的类Serialized存到硬碟里,
可是後来你却更改了类别的field(增加或减少或改名).
当你Deserialize时,就会出现Exception.这样就会做成不兼容性的问题.

来自soso的解释,http://wenwen.soso.com/z/q131562892.htm

有点明白,我理解只是作一个版本的声明,减少出错的机会罢了。
shen0326ps 2009-06-12
  • 打赏
  • 举报
回复
学到!!!
1598583 2009-06-04
  • 打赏
  • 举报
回复
顶一下。。。。。
xiaozhuaizhuai 2009-01-08
  • 打赏
  • 举报
回复
用来表明类的不同版本间的兼容性。如果你修改了此类, 要修改此值。否则以前用老版本的类序列化的类恢复时会出错。为了在反序列化时,确保类版本的兼容性,最好在每个要序列化的类中加入private static final long serialVersionUID这个属性,具体数值自己定义。

Window-->Preferences-->Java,将serializable class without serialVersionUID的设置由warning改为Ignore。然后Eclipse会重新编译程序,那些警告信息也就消失了
tjzero_sapce 2009-01-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xinyung 的回复:]
Java序列化机制划分版本
[/Quote]

能说的更详细点么? 为什么Servlet 也需要这样呢?
xinyung 2009-01-08
  • 打赏
  • 举报
回复
Java序列化机制划分版本
kao331431214 2009-01-08
  • 打赏
  • 举报
回复
同问

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧