我的一些继承Serializable接口的java文件,编译都没问题,但是我用findbugs这个工具来检查,都会报“可能序列化,考虑定义一个serialVersionUID”。
我在google里搜索了一下,都说要定义一个类似“private static final long serialVersionUID = 7526472295622776147L; ”的变量,但是“7526472295622776147L”这个数字是怎麽出来的,而且,我的系统中有多个继承Serializable接口的java文件,难道都要用一个数字吗?解决立刻给分!

解决方案 »

  1.   

    serialVersionUID 用来表明类的不同版本间的兼容性.
    如果你修改了此类, 要修改此值. 否则以前用老版本的类序列化的类恢复时会出错.
      

  2.   

    比如你的类为test.class
    可以利用工具产生这个serialVersionUID命令行: serialver test
      

  3.   

    如果你不定义serialVersionUID, 系统会计算一个.
    这个值倚赖于类名,所实现的接口名,public及protected成员名.
    任何对这些信息的改变都会导致不同的serialVersionUID.
    因此, 如果不显示定义此值, 你如果对类做了小改动, 反序化时会异常.
    为了保证兼容性和提高性能(计算UID会耗时), 建议显示定义此值.你可以随便自定义一个, 也可用上面说的serialver工具产生.