我遇到了一个扩展exception的异常处理程序类,如下所示:
public class AppFileReaderException extends Exception {
//Explicit serialization UID added
private static final long serialVersionUID = -2458461415998318236L;
public AppFileReaderException(String msg)
{
super(msg);
}作者使用了显式的序列化版本UID,并在其他类似的异常处理程序类中忽略了该UID。根据我对另一个SO post的理解,如果应用程序没有使用任何序列化和反序列化,我们可以忽略序列化UID。奇怪的是,作者使用了负UID。我很想知道这是有效的还是推荐的做法。使用负serialVersionUID还有其他原因吗?
发布于 2013-05-19 21:58:06
使用负serialVersionUID还有其他原因吗?
如果你看到任何“随机看起来”的显式serialVersionUID,它可能是由集成开发环境生成的,通常从UID开始,如果没有提供显式版本,就会生成UID。
序列化版本的UID就像哈希码--值的大小实际上是无关紧要的;除了用值之间的区别之外,正和负都没有意义。
发布于 2013-05-19 21:59:53
seialVersionUID用于确定序列化对象是否与当前版本的类兼容。除了值必须是长的,并且类的不兼容版本使用不同的值之外,没有任何限制。
发布于 2013-05-19 22:11:53
java.io.Serializable接口解释serialVersionUID可以计算,也可以固定。计算值基于类的各个方面。它类似于hashCode,它也可以是负的。在JDK中有一个IDE,给定一个类就可以计算这个值,尽管在实践中它通常是由serialver生成的。
https://stackoverflow.com/questions/16635383
复制相似问题