★★Java質問・相談スレッド140★★
■ このスレッドは過去ログ倉庫に格納されています
0086デフォルトの名無しさん
2010/07/27(火) 11:24:04>>72に書いてあるけど、たとえば
//バージョン1
class A implements Serializable { public static final long serialVersionUID = 0; }
class B extends A implements Serializable { }
//バージョン2
class A implements Serializable { public static final long serialVersionUID = 0; }
class B extends A implements Serializable { private int field; }
で、BがAのserialVersionUIDを継承できたとする。
するとバージョン1のBを直列化したものとバージョン2のBを直列化したものには互換性がない、
にもかかわらずserialVersionUIDが同じという事態が発生する。
serialVersionUIDは大抵privateなので
継承元がserialVersionUIDを宣言しているかを一々確認するのは、
素直にBにserialVersionUIDをつけるより手間がかかる。
serialVersionUIDが付いているかどうかだけならコンパイラは簡単にチェックできるが
AのserialVersionUIDを継承できる場合にBがAのserialVersionUIDを継承しつつ、
前のバージョンからフィールドを追加したかまではコンパイラはチェックできない。
■ このスレッドは過去ログ倉庫に格納されています