当前位置:  开发笔记 > 编程语言 > 正文

使用静态初始化的Java序列化

如何解决《使用静态初始化的Java序列化》经验,为你挑选了1个好方法。

在Java中,静态和瞬态字段未序列化.但是,我发现静态字段的初始化会导致生成的serialVersionUID被更改.例如,static int MYINT = 3;导致serialVersionUID更改.在这个例子中,它是有道理的,因为该类的不同版本将获得不同的初始值.为什么任何初始化都会改变serialVersionUID?例如,static String MYSTRING = System.getProperty("foo");还会导致serialVersionUID发生更改.

具体来说,我的问题是为什么用方法初始化会导致serialVersionUID发生变化.我遇到的问题是我添加了一个用系统属性值(getProperty)初始化的新静态字段.该更改导致远程调用上的序列化异常.



1> Damien B..:

您可以在错误4365406和计算serialVersionUID的算法中找到有关该信息的一些信息.基本上,在更改static成员的初始化时System.getProperty(),编译器static在引用System该类的类中引入了一个新属性(我假设System该类以前在类中未引用),并且由于编译器引入的此属性不是私有的,因此参与serialVersionUID计算.

道德:总是使用显式serialVersionUID,你会节省一些CPU周期和一些头痛:)

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有