关于实现序列化的类提示没有定义serialVersionUID域

原创 2016年08月31日 11:08:00

The serializable class XXX does not declare a static final serialVersionUID field of type long

serialVersionUID作用: 
序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。 

你可以随便写一个,在Eclipse中它替你生成一个,有两种生成方式:
一个是默认的1L,比如:private static final long serialVersionUID = 1L;
一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:private static final long serialVersionUID = -8940196742313994740L;之类的。

当你一个类实现了Serializable接口,如果没有定义serialVersionUID,Eclipse会提供这个提示功能告诉你去定义之。 
在Eclipse中点击类中warning的图标一下,Eclipse就会自动给定两种生成的方式,如上面所述。如果不想定义它,在Eclipse的设置中也可以把它关掉的,设置如下: 
Window ==> Preferences ==> Java ==> Compiler ==> Error/Warnings ==> Potential programming problems 
将Serializable class without serialVersionUID的warning改成ignore即可。 

如果你没有考虑到兼容性问题时,就把它关掉,不过有这个功能是好的,只要任何类别实现了Serializable这个接口的话,如果没有加入serialVersionUID,Eclipse都会给你warning提示,这个serialVersionUID为了让该类别Serializable向后兼容。 

如果你的类Serialized存到硬盘上面后,可是后来你却更改了类别的field(增加或减少或改名),当你Deserialize时,就会出现Exception的,这样就会造成不兼容性的问题。 

但当serialVersionUID相同时,它就会将不一样的field以type的预设值Deserialize,这个可以避开不兼容性的问题。

Java中序列化的serialVersionUID作用

Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象。 序列化是Java中实现持久化存储的一种方法;为数据传输提供了线路级对象表示法。 Java的序列化机制是通过在运行...
  • z69183787
  • z69183787
  • 2015年07月10日 19:44
  • 3422

关于实现序列化的类提示没有定义serialVersionUID域

//题要:在网上找了一个关于记事体的代码,copy在记事本里时出现如下提示: The serializable class XXX does not declare a static final se...
  • lengxue_1014
  • lengxue_1014
  • 2009年11月26日 10:44
  • 280

关于实现序列化的类提示没有定义serialVersionUID域

轉自http://www.cnblogs.com/oisiv/archive/2006/04/25/384426.htmlThe serializable class XXX does not dec...
  • zgmzyr
  • zgmzyr
  • 2010年08月10日 11:12
  • 1403

Java之序列化SerialVersionUID的作用

先总结下:          Serializable接口 标记类可以被序列化(ObjectOutputStream)和反序列化(ObjectInputStream) 暴露了类的内存代表二进制...
  • lqhed
  • lqhed
  • 2016年06月01日 15:35
  • 423

需要序列化的类中没有写serialVersionUID的解决办法

               由于没赋值serialVersionUID 只是警告,不是错误,造成先前没留意设定serialVersionUID,网络两端上线运行一段时间也感觉正常。如果再增减修改fi...
  • e5945
  • e5945
  • 2010年12月14日 09:55
  • 773

scala 序列化SerialVersionUID

scala 序列化需要继承自Serializable 这个特质SerialVersionUID 的写法为:@SerialVersionUID(-4486938584926174252L) class ...
  • TingiBanDeQu
  • TingiBanDeQu
  • 2016年11月04日 19:24
  • 1220

序列化Serializable serialVersionUID的作用

序列化Serializable的方式特别简单 实现Serializable接口,再在类中声明如下这一个属性即可。 private static final long serialVersionUID ...
  • lazyer_dog
  • lazyer_dog
  • 2016年06月14日 16:08
  • 1460

序列化与反序列化中serialVersionUID的作用(通俗易懂)

serialVersionUID:字面意思上是序列化的版本号,这个在刚刚接触java编程时,学序列化大家一般都不会注意到,在你一个类序列化后除非你强制去掉了myeclipse中warning的功能,在...
  • hongshan50
  • hongshan50
  • 2013年10月17日 17:56
  • 1294

Java对象的serialVersionUID在序列化和反序列化的用途

本博客主要转自如下链接 http://blog.csdn.net/javazejian/article/details/52665164 这篇文章写的不错,但是有些地方我估计博主没有亲自测试,所以有...
  • u011734144
  • u011734144
  • 2016年09月29日 12:44
  • 1632

Serializable序列化接口serialVersionUID的理解

下面是一个显式声明了serialVersionUID的例子: 在序列化和反序列化的代码中都有一个实现了Serializable 的User类; public class User implemen...
  • edward_leo
  • edward_leo
  • 2016年03月10日 21:59
  • 2447
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于实现序列化的类提示没有定义serialVersionUID域
举报原因:
原因补充:

(最多只允许输入30个字)