• ベストアンサー

ActionFormをjavacすると

以下の様な警告がでました。 ActionForm.java: package struts; import org.apache.struts.action.ActionForm; public final class AuthenticationForm extends ActionForm { private String id; private String pass; public void setId(String id) {this.id = id;} public String getId() {return id;} public void setPass(String pass) {this.pass = pass;} public String getPass() {return pass;} } # javac -cp ./struts.jar:./servlet-api.jar:. AuthenticationForm.java ---------- 1. WARNING in AuthenticationForm.java (at line 4) public final class AuthenticationForm extends ActionForm ^^^^^^^^^^^^^^^^^^ The serializable class AuthenticationForm does not declare a static final serialVersionUID field of type long ---------- 1 problem (1 warning) # 警告の意味がわからないのですが この警告の意味を教えてください。 また、この警告を回避する手段がありましたら教えてください。

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

  • ベストアンサー
  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

英語そのままですが。 「シリアライズできるクラスはstatic final long serialVersionUIDというフィールドをもたなきゃだめ」 ってことです。 「気にするな」ってのが私の個人的な回答ですが、気になるならば JDK1.5以上なのであれば、アノテーションで @SuppressWarnings("serial") をそのクラスの前に宣言しておけばよろし。 http://www.kawaz.jp/pukiwiki/?Java%20Tips#SuppressWarnings

reiman
質問者

補足

ありがとうございます。 Javaのバージョンは1.4.2です。 以下のようにすればエラーはでなくなりましたが serialVersionUID は何に使うのでしょうか? package struts; import org.apache.struts.action.ActionForm; public final class AuthenticationForm extends ActionForm { static final long serialVersionUID=0; private String id; private String pass; public void setId(String id) {this.id = id;} public String getId() {return id;} public void setPass(String pass) {this.pass = pass;} public String getPass() {return pass;} }

その他の回答 (1)

  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.2

>serialVersionUID >は何に使うのでしょうか? オブジェクトをシリアライズ化した際に、そのデータを別の環境で復元する時に使うID、だそうです。 オブジェクトを別のマシンなどに送信する際に、オブジェクトをシリアライズ化してそのデータを送信、 受信したマシンでシリアライズ化データを「元のオブジェクト」に復元して利用するのですが、 このとき、「本当に元のオブジェクトなのか」を厳密にしておかないとトラブルになります。 そこで、このIDをあらかじめ決めておいて、IDが復元しても同じならOK、としているようです。 serialVersionUIDが指定されていなくても、IDを持たないわけではなく、自動的に計算して付加されるようです。 クラスの情報とかいろいろ使って、(たぶん)一意に決まるようなものみたいです。 が、環境によってこの計算結果が「異なるかもしれない」らしいのです。 なので、「同じオブジェクトが違う」と言われるかもしれないので、プログラマの方でちゃんとしたものを付けておいてね、 ということのようです。 と、ここまで言ってなんですが、シリアライズ化する必要がなければ全く意味のないものですね。 ちなみに、J2SDKにはserialver.exeというものが付いていて、それで計算できるらしいです。 Eclipse使ってる人はプラグイン入れれば付けられるみたいです。 それ以外では…どうしてるんだろうか。 PED02744さんの回答のように、@SuppressWarningsを使うのが多いのかも。

reiman
質問者

お礼

大変参考になりました。 ありがとうございました。