2017-07-05 2 views
4

私はorg.springframework.jdbc.datasource.DataSourceTransactionManagerのソースコードを見ると混乱しますが、なぜSerializableを実装しますが、serialVersionUIDは与えられていませんか?いくつかのAPIがSerializableインターフェイスを実装しましたが、serialVersionUIDを宣言しなかった理由は何ですか?

[serializable]

+6

Springの作成者は、定義しないことを選択したためです。シリアル化のためにserialVersionUIDは必要ありません。クラスを進化させているときに逆方向シリアル化の互換性をサポートする予定がある場合は、これが必要です。 –

答えて

3

デフォルトのメカニズムがあなたのためにそれを世話、それを宣言することが推奨されていますが、それを宣言省略することができます。

serializableクラスが明示的にserialVersionUIDのが宣言されていない場合のJava(TM)オブジェクト直列化仕様で説明したように、その後、直列化ランタイムが、クラスのさまざまな側面に基づいて、そのクラスのデフォルトのserialVersionUID値を計算します。ただし、デフォルトのserialVersionUIDの計算は、コンパイラの実装によって異なる可能性があるクラスの詳細に対して非常に敏感で、非直列化中に予期しないInvalidClassExceptionsが発生する可能性があるため、すべての直列化可能なクラスがserialVersionUID値を明示的に宣言することを強くお勧めします。したがって、異なるJavaコンパイラ実装間で一貫したserialVersionUID値を保証するためには、直列化可能クラスで明示的なserialVersionUID値を宣言する必要があります。

+0

あなたの答えを心から感謝します –

関連する問題