表示被注解的字段或方法是由 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- 任意访问修饰符
Object writeReplace() throws ObjectStreamException - 任意访问修饰符
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,但上述三个方法和一个字段在可外部化类中 不会 被使用。
Serializable 类中可能看起来没有被使用。
- 自:
- 14
- 外部规范
- 参见: