私は最近、同じクラスの異なるバージョンをシリアル化/逆シリアル化と互換性のあるものにするためにserialVersionUIDを使用する必要がなくなったというコメントを、Java5以降で読みました。これは正しいです?多分それは共変のリターンタイプと混同されました。だから皆さんと一緒にチェックしたかったのです。
2 に答える
Java 5用のJavaDocsは、それが必要であるとまだ述べています。
シリアル化可能なクラスがserialVersionUIDを明示的に宣言していない場合、シリアル化ランタイムは、Java(TM)オブジェクトのシリアル化仕様で説明されているように、クラスのさまざまな側面に基づいて、そのクラスのデフォルトのserialVersionUID値を計算します。ただし、デフォルトのserialVersionUID計算は、コンパイラの実装によって異なる可能性のあるクラスの詳細に非常に敏感であり、逆シリアル化中に予期しないInvalidClassExceptionsが発生する可能性があるため、すべてのシリアル化可能なクラスで明示的にserialVersionUID値を宣言することを強くお勧めします。したがって、さまざまなJavaコンパイラ実装間で一貫したserialVersionUID値を保証するには、シリアライズ可能なクラスで明示的なserialVersionUID値を宣言する必要があります。
Java 1.4以降、シリアル化にXMLEncoderを使用できるようになりました。これにより、他のほとんどのシリアル化ライブラリと同様に、serialVersionUIDが無視されます。
ただし、ObjectOutputStreamを使用する場合、serialVersionUIDの使用法は変更されていません。