[2110] Re:serialVersionUID について
投稿者:(ぱ)こと管理人
2018/02/26 01:28:16
>「//拡張子とContent-Typeの対応表」の部分について、P.70にあるリスト2-11では49行目に
>
> private static final long serialVersionUID = 1L;
>
>という行がありますが、A-22にはありません。
>これは、どのような違いがあってのことでしょうか?可能であれば、そもそも
>「serialVersionUID 」とは何かも教えて頂けるとありがたいです!
serialVersionUIDは、シリアライズするクラスのバージョンを示すためのものです。
Javaだとシリアライズ機能でオブジェクトの内容をファイルに保存したりできますが、
プログラム側のバージョンが上がってクラスにメンバが増えたりした(かつ、そのメンバの
値がデフォルト値ではいけなくて、readObject()によるカスタマイズでも対応しないとか
細かい条件はありますが)場合は、バージョンアップ前のプログラムで保存したデータは
バージョン違いで読み込めないということになります。
serialVersionUIDは、シリアライズするときに、そのクラスのバージョンを
示すためのものです(バージョンが違うと、デシリアライズ時にエラーになります)。
指定しなくても構いませんが、これを指定しないと、Eclipseでは警告が出たりします。
「private static final long serialVersionUID = 1L;」と書いておけば
警告は抑止できますが、シリアライズを扱っているわけでもない入門書で
余計なコードを入れるのもよろしくないかと思い、本書のサンプルコードでは
基本これは書いていない――はずなのですが、リスト2-11では、Eclipseに
うっかり自動生成されたのが残ってしまったのかと思います。