• ベストアンサー

明示的なserialVersionUIDの意義と定義法

最近コーディングツールをEclipse3.1に乗り換えたのですが、"Serializable class without serialVersionUID"という警告文に出くわしました。 Sunのserializableインタフェースに関するドキュメントを参照したところ、serialversionUIDを明示的に宣言することによってJavaコンパイラの実装環境の差異に対応可能である、という主旨で読み取れたのですが、それがどのようなことであるのか今ひとつ具体的にイメージできません。 また、serialversionUIDを明示的に定義する方法についても、手持ちの文献やwebの検索では調べ切れませんでした。 上記について御存知の方が居られましたら、御教示お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • deadlock
  • ベストアンサー率67% (59/87)
回答No.2

classファイルの互換性などに関するものです。 シリアライズ/デシリアライズを行うときや、クラスのロードを行うときに関連してきます。 Serializableなclassファイルには必須なのですが、ソース中にないときは勝手に付加されます。 >serialversionUIDを明示的に定義する方法 手順1.自分が作成したクラスに対して、serialverコマンドを実行 http://www.techfirm.co.jp/manual/jdk11ja/tooldocs/solaris/serialver.html 参照 手順2.自分のクラスにserialversionUIDを定義 上記で求めたものを、自分のクラスに追加します。 名前が決まっていることを除けば普通のlong型定数ですね。 宣言の形式は↓のような感じです。 static final long serialVersionUID = -6849794470754667710L; 具体的なサンプルは、JDKのソースを参照してみるといいです。

etendard
質問者

お礼

御回答ありがとうございます。 serialVersionUID値の取得法についてはEclipseの標準プラグインにも生成機能が含まれているようですが、開発環境によってはEclipseが使用できないケースも考えられるので、JDKからserialver.exeを使用する方向で検討しています。 有益なアドバイスを頂き、ありがとうございました。

その他の回答 (1)

noname#49664
noname#49664
回答No.1

これは、Eclipse 3.1で、以前のバージョンで作ったプロジェクトをインポートしたなどしたのでしょうか。こういう場合に、この警告に出くわすことがあるようです。  とりあえず警告をなくしたいのならば以下の設定を変更してみてください。 ・「Windows」メニューの「Preferences」メニューを選び、設定ウインドウを呼び出します。 ・左の項目から「Compiler」内の「Errors/Warnings」を選びます。 ・右側に表示された項目から「Potential programming problems」をクリックします。すると更に細かな項目が展開表示されます。 ・ここから「Serializable class without serialVersionUID」を「Ignore」に変更します。 これで警告は出なくなると思います。このへんは、実は私もまだよくわかってないのですが、この種の警告が現れたら、この「Errors/Warnings」の中の項目を調べてみるとよいと思います。 なお、serialversionUIDの定義については、impelments Seriarizableしたクラスの中に、 static final long serialVersionUID = シリアル値;  ・・という形でフィールドを定義すればいいようです。

etendard
質問者

お礼

御回答ありがとうございます。 プロジェクトのインポートは行っていないのですが、従来使用していたjcpadと同じ調子でコーディングしたところ、原因不明の警告が表示されたために疑問に思っていました。 オプションで警告を無効化する方法は調べがついていましたが気分のいいものではありませんし、仕事の上でJavaと付き合う以上は知っておいたほうが良いだろうと考え質問させて頂いた次第です。 serialVersionUIDの定義法については、手続きとしてはフィールドを定義すれば良いのですね。引き続き、値の取得法について調べてみます。有益な御示唆を頂き、ありがとうございました。

関連するQ&A