Exception子类是否需要显式声明serialVersionUID?
Exception子类是否需要单独声明serialVersionUID
结论
需要,所有继承Exception的自定义异常类都建议显式单独声明serialVersionUID。
原因
- serialVersionUID是类独立的序列化版本校验属性,父类Exception定义的serialVersionUID仅用于父类本身的序列化/反序列化校验,不会被子类复用为校验依据,子类的序列化校验只会读取子类自身的serialVersionUID值。
- 如果不显式声明子类的serialVersionUID,Java编译器会在编译阶段基于当前类的结构(字段、方法、继承关系、访问修饰符等所有类特征)自动生成一个哈希值作为默认的serialVersionUID。只要后续类结构发生任何变动,哪怕只是新增一个普通方法、修改了某个字段的访问权限,自动生成的哈希值都会变化,导致之前序列化的该异常对象反序列化时直接抛出
InvalidClassException。 - 即便是没有新增任何自定义成员的空异常子类,也建议显式声明。可以避免不同编译器、不同JDK版本自动计算的默认值不一致的问题,保障跨环境反序列化的兼容性。
补充建议
你代码中的写法符合规范,后续如果IntersectionException发生了不兼容的结构变更(比如删除原有字段、新增必填的成员属性),记得同步更新serialVersionUID的值,避免反序列化出结构不符合预期的对象。
内容的提问来源于stack exchange,提问作者Tristate
相关产品推荐
相关产品推荐

