否定serialVersionUID?

时间:2013-05-19 13:55:25

标签: java serialization serialversionuid

我遇到了一个异常处理程序类,它扩展了异常,如下所示:

public class AppFileReaderException extends Exception {
    //Explicit serialization UID added 
    private static final long serialVersionUID = -2458461415998318236L;

    public AppFileReaderException(String msg) 
    {
        super(msg);
    }

作者使用了显式序列化版本UID,并在其他类似的异常处理程序类中忽略了相同的内容。基于我从另一个SO post理解的内容,如果应用程序没有使用任何序列化和反序列化,我们可以忽略序列化UID。奇怪的是,作者使用了否定的UID。我很想知道这是有效还是推荐的做法。有没有其他理由使用否定的serialVersionUID?

3 个答案:

答案 0 :(得分:12)

  

还有其他理由使用否定的serialVersionUID吗?

如果您看到任何“随机查看”显式serialVersionUID,它可能是由IDE生成的,通常从未在未提供显式版本时生成的UID开始。

序列化版本UID就像哈希码 - 值的大小实际上是无关紧要的;除了区分价值之外,正面和负面都是没有意义的。

答案 1 :(得分:2)

seialVersionUID用于确定序列化对象是否与该类的当前版本兼容。除了值必须很长并且类的不兼容版本使用不同的值之外,没有任何限制。

答案 2 :(得分:2)

java.io.Serializable API说明可以计算或修复serialVersionUID。计算值基于类的各个方面。它类似于hashCode,也可以是负数。 JDK中有serialver util,给定一个类可以计算这个值,但实际上它通常是由IDE生成的。