可能性の重複:
Why should I bother about serialVersionUID?javaのシリアル化でSerialVersionUIDとは何ですか?
SerialVersionUIDをJavaでシリアライズには何ですか?それは何をするためのものか? Javadocから
可能性の重複:
Why should I bother about serialVersionUID?javaのシリアル化でSerialVersionUIDとは何ですか?
SerialVersionUIDをJavaでシリアライズには何ですか?それは何をするためのものか? Javadocから
:各シリアライズクラスで
シリアライゼーションランタイム関連付け バージョン番号、 デシリアライズ中に使用されるのserialVersionUIDは、シリアライズ オブジェクトの送信者と受信者が持っていることを確認するために呼び出さそのオブジェクトのロードされたクラスは、シリアル化に関して と互換性があります。受信側が対応する送信側のクラス と異なるserialVersionUIDを持つ オブジェクトのクラスをロードした場合、逆シリアル化は InvalidClassExceptionになります。直列化可能クラスは、静的な最終でなければなりません 「のserialVersionUID」という名前のフィールドを宣言することにより、独自の のserialVersionUIDを明示的に宣言し、long型のことができます。
ANY-ACCESS-MODIFIER静的最終長いserialVersionUIDの= 42L;
直列化可能クラスが明示的に serialVersionUIDのが宣言されていない場合のJava(TM)オブジェクト直列化で説明したように、その後、直列化ランタイムは、さまざまな側面クラスの に基づいて、そのクラスの デフォルトのserialVersionUID値を計算します 仕様。しかし、強く デフォルトは計算がコンパイラの実装によって異なる場合があり、そして ので 直列化復元中に予期しないInvalidClassExceptionsにつながることができますクラス 詳細に非常に敏感であるserialVersionUIDのため、すべての 直列化可能クラスが明示的に、serialVersionUIDの値を宣言することをお勧めします。したがって、異なるjavaコンパイラ実装間で一貫したserialVersionUID 値を保証するには、シリアライズ可能な クラスで明示的なserialVersionUID値を宣言する必要があります。また、 は、明示的なserialVersionUID宣言では、できるだけ のprivate修飾子を使用することを強く推奨しています。そのような宣言は、 にのみ適用されるため、直ちに宣言するクラスserialVersionUIDフィールドは継承されたメンバーとして便利な ではありません。