我遇到了一个异常处理程序类,它扩展了异常,如下所示:
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?
答案 0 :(得分:12)
还有其他理由使用否定的serialVersionUID吗?
如果您看到任何“随机查看”显式serialVersionUID
,它可能是由IDE生成的,通常从未在未提供显式版本时生成的UID开始。
序列化版本UID就像哈希码 - 值的大小实际上是无关紧要的;除了区分价值之外,正面和负面都是没有意义的。
答案 1 :(得分:2)
seialVersionUID用于确定序列化对象是否与该类的当前版本兼容。除了值必须很长并且类的不兼容版本使用不同的值之外,没有任何限制。
答案 2 :(得分:2)
java.io.Serializable
API说明可以计算或修复serialVersionUID
。计算值基于类的各个方面。它类似于hashCode,也可以是负数。 JDK中有serialver
util,给定一个类可以计算这个值,但实际上它通常是由IDE生成的。