モジュール java.base
パッケージ java.io

注釈型Serial


@Target({METHOD,FIELD})
@Retention(SOURCE)
public @interface Serial
注釈付きのフィールドまたはメソッドが、「Javaオブジェクト直列化仕様」で定義された「直列化メカニズム」の一部であることを示します。 この注釈型は、Override注釈型で有効化されているチェックと似た、直列化関連宣言のコンパイル時チェックを可能にし、メソッドのオーバーライドを検証することを目的としています。 Serializableクラスでは、コンパイラが誤解を招くような直列化関連のフィールドやメソッド、その他の理由で検出が難しいような誤解を招く、@Serial注釈の使用が推奨されます。

具体的には、この型の注釈は、Serializableとして宣言されたクラス内の直列化関連メソッドおよびフィールドに適用されます。 5つの直列化関連メソッドは次のとおりです:

  • 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
2つの直列化関連フィールドは次のとおりです:
  • private static final ObjectStreamField[] serialPersistentFields
  • private static final long serialVersionUID
コンパイラは、@Serial注釈の付いたメソッドまたはフィールドが、意味のあるコンテキストで宣言されている定義済の直列化関連のメソッドまたはフィールドのいずれかであることを検証し、そうでない場合は警告を発行することをお薦めします。

この注釈を他のフィールドまたはメソッドに適用する場合は、次のような意味上のエラーになります:

  • Serializable以外のクラスのフィールドまたはメソッド
  • 適切な構造宣言のフィールドまたはメソッド、ただし無効な型のフィールドまたはメソッド。 たとえば、enumタイプは0LserialVersionUIDを持つように定義されているため、enumタイプで宣言されたserialVersionUIDフィールドは無視されます。 同様に、上で識別された5つの直列化関連のメソッドは、enumタイプに対して無視されます。
  • Externalizableクラス内の場合:
    • writeObject readObjectおよびreadObjectNoDataのメソッド宣言
    • serialPersistentFieldsのフィールド宣言
    Externalizableインタフェースは Serializableを拡張しますが、3つのメソッドと上の1つのフィールドは外部化可能なクラスには使用されません。
直列化メカニズムは、指定されたフィールドとメソッドを反映してアクセスするものであり、Serializableクラスで使用されていないフィールドとメソッドが表示される場合があります。

導入されたバージョン:
14
関連項目:
Serializable, Externalizable