`
jeffnono
  • 浏览: 6596 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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

阅读更多
The serializable class XXX does not declare a static final serialVersionUID field of type long

可序列化的类 CreateBPOVIEW 未声明类型为 long 的静态终态 serialVersionUID 字


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,这个可以避开不兼容性的问题。




Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=671060
分享到:
评论

相关推荐

    IDEA中实体类实现了序列化接口

    ### IDEA中实体类实现序列化接口与序列化ID生成 #### 一、序言 在Java开发中,序列化是一项非常重要的技术,它允许将对象的状态转换为字节流,从而方便在网络上传输或者存储到磁盘上。为了保证序列化的兼容性与...

    java对象序列化和反序列化

    2. **接口**: 实现序列化的类需要实现`java.io.Serializable`接口。这个接口是一个标记接口,没有定义任何方法,但是通过实现这个接口,表明类的对象是可以被序列化的。 3. **过程**: - 序列化:使用`java.io....

    java序列化实现演示

    - 不是所有的类都需要实现序列化。只有那些需要持久化或在网络间传输的对象才应考虑序列化。 - 序列化可能会暴露对象的内部状态,因此对安全敏感的数据,谨慎使用序列化。 - 使用`transient`关键字标记不需要序列化...

    java serializable 序列化与反序列化

    3. **如何实现序列化**:只需让类实现`Serializable`接口,Java的默认序列化机制就会处理剩余部分。例如: ```java public class MyObject implements Serializable { private String name; private int age; ...

    Java实现序列化例子

    在Java中,如果一个类需要支持序列化,那么这个类就需要实现`java.io.Serializable`接口,尽管该接口没有任何方法需要实现,但它的存在就标志着这个类的对象可以被序列化。 首先,我们来看一下`SerializableDemo`这...

    java 对象的序列化与反序列化

    1. **序列化标识符(SerialVersionUID)**:Java允许你为每个可序列化的类定义一个唯一的`serialVersionUID`,默认是由JVM根据类的结构计算出来的。如果类的版本更新导致结构变化,而此值未做更新,反序列化时会抛出`...

    反序列化失败的原因报告

    序列化 ID 不一致是因为实体类实现了 Serializable 接口,但没有定义 serialVersionUID 的值。系统会根据类的修饰符、实现的接口、定义的方法以及属性等信息计算出 serialVersionUID,因而导致本地的实体类和服务器...

    序列化类的作用Serializable

    需要注意的是,实现序列化的类应该谨慎处理其内部状态,因为序列化会保存对象的所有字段,包括私有(private)和受保护的(protected)成员。如果某个类的父类没有实现`Serializable`接口,那么子类仍然可以序列化,...

    探索Java序列化与反序列化的奥秘:数据持久化的桥梁

    下面是一个简单的例子,展示了如何实现序列化和反序列化。 ```java import java.io.*; // 定义一个可序列化的类 class User implements Serializable { private static final long serialVersionUID = 1L; ...

    Java对象的序列化与反序列化Java开发Java经验技巧

    - **实现方式**:要实现序列化,Java对象所属的类必须实现`java.io.Serializable`接口。该接口是一个标记接口,不包含任何方法,只是表明类支持序列化。 - **序列化API**:主要使用`java.io.ObjectOutputStream`类...

    Java序列化

    - `java.io.Serializable` 是Java序列化的基础,任何类如果想要实现序列化,就必须实现这个接口。这个接口是一个标记接口,没有定义任何方法,只是表明该类的对象可以被序列化。 3. **序列化流程** - 使用 `java....

    java类中serialVersionUID的作用及其使用

    2. 自动生成serialVersionUID:如果没有显式定义serialVersionUID,Java序列化机制会根据Class自动生成一个serialVersionUID。 3. 使用IDE生成serialVersionUID:在Eclipse中,可以使用IDE生成serialVersionUID,...

    java自动序列化

    这个接口是一个标记接口,没有定义任何方法,仅表示对象支持序列化。 二、为什么需要Java序列化 1. 持久化:序列化可以将对象状态持久化到磁盘,以便下次程序运行时可以恢复。 2. 网络传输:在分布式系统中,序列化...

    深入剖析Java序列化:挑战复杂的面试题与详细解析

    - 实现`Serializable`接口,并可选择重写`writeObject()`和`readObject()`方法来自定义序列化和反序列化逻辑。 5. **处理循环引用**: - 使用`transient`关键字标记循环引用的成员变量,或者通过重写序列化方法来...

    Java 文件 序列化 读写

    - 在Java中,如果一个类想要实现序列化,只需实现`Serializable`接口即可,但该接口没有任何方法,只是一个标志接口。 3. **序列化过程**: - 使用`ObjectOutputStream`类的`writeObject()`方法将对象序列化到...

    详述IntelliJ IDEA 中自动生成 serialVersionUID 的方法(图文)

    IntelliJ IDEA 自动生成 serialVersionUID 在 Java 序列化机制中,...IntelliJ IDEA 自动生成 serialVersionUID 是一个非常有用的功能,它可以帮助开发者更方便地实现序列化和反序列化,提高开发效率和质量。

    Java序列化_Java序列化结构_

    此外,对于需要序列化的类,可以重写`readObject()`和`writeObject()`方法来自定义序列化行为,以处理特定的需求,例如忽略某些字段或执行特定的验证。 总的来说,Java序列化是Java编程中一个重要的特性,但它也有...

    Java中serialVersionUID的解释

    在 Eclipse 中,当我们实现了 Serializable 接口时,如果没有定义 serialVersionUID,Eclipse 会提供这个提示功能告诉我们去定义它。如果我们不想定义它,在 Eclipse 的设置中也可以把它关掉的,设置如下:Window ==...

    coreJava: serialVersionUID

    在Java中,实现序列化的类需要实现`java.io.Serializable`接口。然而,仅仅实现这个接口并不足以确保序列化和反序列化始终成功,因为类的结构可能会随时间发生变化,如增加、删除或修改字段。这就是`...

    序列化与反序列化Demo

    在Java中实现序列化,我们需要让类实现`java.io.Serializable`接口。这个接口没有定义任何方法,仅仅是一个标记接口,表明该类的对象可以被序列化。例如: ```java public class SerializableDemo implements ...

Global site tag (gtag.js) - Google Analytics