3

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

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

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

作者使用了显式的序列化版本 UID,并在其他类似的异常处理程序类中忽略了相同的内容。根据我从另一篇SO 帖子中了解到的情况,如果应用程序未使用任何序列化和反序列化,我们可以忽略序列化 UID。奇怪的是,作者使用了负 UID。我很想知道这是否有效或推荐的做法。还有其他理由使用负的serialVersionUID吗?

4

3 回答 3

12

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

如果您看到任何“随机外观”serialVersionUID的显式,它可能是由 IDE 生成的,通常以 UID 开头,如果没有提供显式版本,则会生成该 UID。

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

于 2013-05-19T13:58:05.677 回答
2

java.io.SerializableAPI 解释说serialVersionUID可以计算或固定。计算值基于类的各个方面。它类似于 hashCode 也可以是负数。JDK 中有serialver一个 util,它给定一个类可以计算这个值,尽管实际上它通常是由 IDE 生成的。

于 2013-05-19T14:11:52.517 回答
2

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

于 2013-05-19T13:59:53.233 回答