Added in [API level 34](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Inherited Methods](https://developer.android.com/reference/java/io/Serial#inhmethods)

# Serial

` public abstract @interface Serial `   
` implements https://developer.android.com/reference/java/lang/annotation/Annotation `

|---|
| java.io.Serial |

<br />

*** ** * ** ***

Indicates that an annotated field or method is part of the [serialization mechanism](https://developer.android.com/reference/java/io/Serializable) defined by the Java Object Serialization Specification. This annotation type is intended to allow compile-time checking of serialization-related declarations, analogous to the checking enabled by the `https://developer.android.com/reference/java/lang/Override` annotation type to validate method overriding. `Serializable` classes are encouraged to use `@Serial` annotations to help a compiler catch mis-declared serialization-related fields and methods, mis-declarations that may otherwise be difficult to detect.

Specifically, annotations of this type should be applied to serialization-related methods and fields in classes declared to be `Serializable`. The five serialization-related methods are:

- `private void writeObject(java.io.ObjectOutputStream stream) throws IOException`
- `private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException`
- `private void readObjectNoData() throws ObjectStreamException`
- *ANY-ACCESS-MODIFIER* `Object writeReplace() throws ObjectStreamException`
- *ANY-ACCESS-MODIFIER* `Object readResolve() throws ObjectStreamException`

The two serialization-related fields are:

<!-- -->

- `private static final ObjectStreamField[] serialPersistentFields`
- `private static final long serialVersionUID`

Compilers are encouraged to validate that a method or field marked with a `@Serial` annotation is one of the defined serialization-related methods or fields declared in a meaningful context and issue a warning if that is not the case.

It is a semantic error to apply this annotation to other fields or methods, including:

- fields or methods in a class that is not `Serializable`
- fields or methods of the proper structural declaration, but in a type where they are ineffectual. For example, `enum` types are defined to have a `serialVersionUID` of `0L` so a `serialVersionUID` field declared in an `enum` type is ignored. The five serialization-related methods identified above are likewise ignored for an `enum` type.
- in a class that is `Externalizable`:
  - method declarations of `writeObject`, `readObject`, and `readObjectNoData`
  - a field declaration for `serialPersistentFields`

  While the `Externalizable` interface extends `Serializable`, the three methods and one field above are *not* used for externalizable classes.

Note that serialization mechanism accesses its designated fields and methods reflectively and those fields and methods may appear otherwise unused in a `Serializable` class.

<br />

**See also:**

- `https://developer.android.com/reference/java/io/Serializable`
- `https://developer.android.com/reference/java/io/Externalizable`

## Summary

### Inherited methods

From interface ` https://developer.android.com/reference/java/lang/annotation/Annotation ` ` abstract https://developer.android.com/reference/java/lang/Class<? extends https://developer.android.com/reference/java/lang/annotation/Annotation>` ` https://developer.android.com/reference/java/lang/annotation/Annotation#annotationType()() `

Returns the annotation interface of this annotation.
` abstract boolean` ` https://developer.android.com/reference/java/lang/annotation/Annotation#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) `

Returns true if the specified object represents an annotation that is logically equivalent to this one.
` abstract int` ` https://developer.android.com/reference/java/lang/annotation/Annotation#hashCode()() `

Returns the hash code of this annotation.
` abstract https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/java/lang/annotation/Annotation#toString()() `

Returns a string representation of this annotation.