Chinaunix

标题: 如何生成serialVersionID? [打印本页]

作者: icesummit    时间: 2005-08-19 00:04
标题: 如何生成serialVersionID?
我用eclipse自动生成总是出错,不知道哪里不对了。听说用JDK和什么工具能够生成,请问知道的达人提供些详细情况。。。
作者: icesummit    时间: 2005-08-19 23:24
标题: 如何生成serialVersionID?
自己顶一下先。
作者: wolfg    时间: 2005-08-19 23:59
标题: 如何生成serialVersionID?
试试这个生成serialVersionUID的插件
http://eclipse-plugins.2y.net/eclipse/plugin_details.jsp?id=257
作者: icesummit    时间: 2005-08-20 11:34
标题: 如何生成serialVersionID?
多谢wolfg,我待会试试。我看到很多人直接用eclipse就可以成功生成serialVersionUID,但是我一做,就是一个1L。不知道有什么配置上的问题。

我先试试这个插件。
作者: wolfg    时间: 2005-08-21 00:09
标题: 如何生成serialVersionID?
[quote]原帖由 "快乐的土豆"]小心滴问一下,这个id做什么用滴?   [/quote 发表:


The serialVersionUID is a universal version identifier for a Serializable class. Deserialization uses this number to ensure that a loaded class corresponds exactly to a serialized object. If no match is found, then an InvalidClassException is thrown.

Guidelines for serialVersionUID :

    * always include it as a field, for example: "private static final long serialVersionUID = 7526472295622776147L; " include this field even in the first version of the class, as a reminder of its importance
    * do not change the value of this field in future versions, unless you are knowingly making changes to the class which will render it incompatible with old serialized objects
    * new versions of Serializable classes may or may not be able to read old serialized objects;  it depends upon the nature of the change; provide a pointer to Sun's guidelines for what constitutes a compatible change, as a convenience to future maintainers

Look this for details
http://www.javapractices.com/Topic45.cjp
作者: wolfg    时间: 2005-08-21 00:32
标题: 如何生成serialVersionID?
原帖由 "icesummit" 发表:
多谢wolfg,我待会试试。我看到很多人直接用eclipse就可以成功生成serialVersionUID,但是我一做,就是一个1L。不知道有什么配置上的问题。

我先试试这个插件。


其实不用插件也可以生成。新加一个implements Serializable的类,编辑器左边会有一个警告标记(灯泡加叹号),双击它,会有一个菜单弹出,可以选择生成默认的serialVersionUID(1L),还是随机的。
作者: icesummit    时间: 2005-08-21 08:20
标题: 如何生成serialVersionID?
原帖由 "wolfg" 发表:


其实不用插件也可以生成。新加一个implements Serializable的类,编辑器左边会有一个警告标记(灯泡加叹号),双击它,会有一个菜单弹出,可以选择生成默认的serialVersionUID(1L),还是随机的。


但是默认生成的1L不行吧?这么短恐怕不行呀。
作者: wolfg    时间: 2005-08-21 12:34
标题: 如何生成serialVersionID?
原帖由 "icesummit" 发表:


但是默认生成的1L不行吧?这么短恐怕不行呀。


抱歉,上面写错了,应该是“还有一个随机的”,见图。default就是1L,generated就是随机的

screen1.jpg (7.43 KB, 下载次数: 121)

screen1.jpg

作者: icesummit    时间: 2005-08-21 19:45
标题: 如何生成serialVersionID?
偶用的就是generated,但是仍然是1L。
作者: yovn    时间: 2005-08-23 21:47
标题: 如何生成serialVersionID?
原帖由 "wolfg" 发表:

抱歉,上面写错了,应该是“还有一个随机的”,见图。default就是1L,generated就是随机的


这个应该不是随机的,是根据Class Name,Filed,Method等等算的Hash值,具体的算法,可以看Java Serializable 规范。
选择Default,1L也是可以的,不是只根据这个字段来唯一标识一个Class的。
作者: wolfg    时间: 2005-08-23 22:41
标题: 如何生成serialVersionID?
原帖由 "yovn" 发表:


这个应该不是随机的,是根据Class Name,Filed,Method等等算的Hash值,具体的算法,可以看Java Serializable 规范。
选择Default,1L也是可以的,不是只根据这个字段来唯一标识一个Class的。
多谢指教!
作者: cooljia    时间: 2005-08-24 00:44
标题: 如何生成serialVersionID?
A good way to solve many problem with object that are Serializable (EJB
implementation are) is to add the serialVerUID in every Serializable class. To add
it, compile your class, then run serialVer with your fully qualified class name as
an argument and it will print the line to add to your class.
Add that line to the class and recompile. Now when you modify the class, it will
have the same serialVerUID and it will cause less error at runtime. This is
notdangerous to do, because if a new version of a class in not compatible with an
old one, unserializing it will still cause an exception when tring to assign
incompatible fields.


1. serialVer.exe这个工具可以在jdk的目录下查找到.
2. 基本上加入类的这个成员变量将会看起来是这个样子的static final long serialVersionUID = -2199636203015991542L;
作者: cooljia    时间: 2005-08-24 00:45
标题: 如何生成serialVersionID?
有个问题, wolfg, 在我的eclipse3.0中, implements Serializable并不能带来你那个小灯泡, 是不是RPWT啊?
作者: sakulagi    时间: 2005-08-24 08:42
标题: 如何生成serialVersionID?
试试Eclipse 3.1没准就可以了。肯定不是RPWT,hoho
作者: dennis2    时间: 2005-08-28 15:03
标题: 如何生成serialVersionID?
>; 在我的eclipse3.0中, implements Serializable并不能带来你那个小灯泡, 是不是RPWT啊?

(这个 ... 不好意思,什么是 RPWT 啊?)

serialVerUID 只是在 JDK 5 中才是强迫使用的,而 eclipse 只是在 3.1 才支持 5,所以在 3.0 里面没有错误提示。
作者: sakulagi    时间: 2005-08-28 17:32
标题: 如何生成serialVersionID?
RPWT == Ren Pin Wen Ti (人品问题,类似于“点背不能怨社会,命苦不能赖政府”的说法)
作者: goncha    时间: 2005-08-28 20:27
标题: 如何生成serialVersionID?
是否把未声明searialVersionID做为Error是可以在Java相关的属性里做设置的.
作者: goncha    时间: 2005-08-28 20:32
标题: 如何生成serialVersionID?
不知道自动生成的serialVersionID会不会根据类中持久化Field的增减自动做调整, 不然serialVersionID不过是个摆设.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2