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