指示带注解的字段或方法是 Java 对象序列化规范 定义的 序列化机制 的一部分。此注释类型旨在允许编译时检查与序列化相关的声明,类似于
Override 注释类型启用的检查以验证方法覆盖。 Serializable 类被鼓励使用 @Serial 注释来帮助编译器捕获错误声明的与序列化相关的字段和方法,否则可能难以检测到的错误声明。
具体来说,这种类型的注解应该应用于声明为 Serializable 的类中与序列化相关的方法和字段。五种与序列化相关的方法是:
private void writeObject(java.io.ObjectOutputStream stream) throws IOExceptionprivate void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundExceptionprivate void readObjectNoData() throws ObjectStreamException- ANY-ACCESS-MODIFIER
Object writeReplace() throws ObjectStreamException - ANY-ACCESS-MODIFIER
Object readResolve() throws ObjectStreamException
private static final ObjectStreamField[] serialPersistentFieldsprivate static final long serialVersionUID
@Serial 注释的方法或字段是否是在有意义的上下文中声明的定义的序列化相关方法或字段之一,如果不是这种情况则发出警告。
将此注释应用于其他字段或方法是语义错误,包括:
- 不是
Serializable的类中的字段或方法 - 正确结构声明的字段或方法,但在它们无效的类型中。例如,
enum类型被定义为具有0L的serialVersionUID,因此在enum类型中声明的serialVersionUID字段将被忽略。对于enum类型,上述五个与序列化相关的方法同样会被忽略。 - 在
Externalizable类中:writeObject、readObject和readObjectNoData的方法声明serialPersistentFields的字段声明
Externalizable接口扩展了Serializable,但上面的三个方法和一个字段是 not 用于可外部化的类。
Serializable 类中显示为未使用。
- 自从:
- 14
- 参见: