serialVersionUID

Eclipse3からSerializableインターフェースを実装したEntityを作ったら、
「The serializable class <クラス名> does not declare a static final serialVersionUID field of type long」
という警告が出るようになった。


ドキュメントによると
「serialVersionUIDは、直列化復元時に直列化オブジェクトの送信側と受信側が
直列化互換性のあるこのオブジェクトのクラスをロードしたかどうかを検証する
ために使用されます」
らしい
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/Serializable.html


従って、永続化するクラスにはprivateなserialVersionUIDフィールド変数に
そのUIDというものを入れておくことが推奨されている。


入れなかった場合は、クラスのデフォルトのserialVersionUIDを計算してくれるらしいが、
この計算は、クラスの詳細情報に大きく左右され、このクラスの詳細情報はさらに、
コンパイラの実装状況に依存しているので、直列化復元時に予期しないInvalidClassException が
発生する可能性があるとのこと。


要は、永続化するクラスにはEclipseの自動計算機能を使用してserialVersionUIDを
書くようにすれば良いらしいので、今後はそうしようと思う。


ちなみに、永続化しないようなクラスでそのような警告が出て目障りな時は、
Eclipseの設定でも警告を出さなくできるが、クラスに以下のアノテーション
つけることで警告を出さなくできる
@SuppressWarnings("serial")