すたらブログ

文系Webプログラマの備忘録

Java: Eclipseでユーザ定義例外のクラスを作ったら警告が表示された

下記のようなユーザ定義例外をEclipseで作りました。

public class FooException extends Exception {

すると下記のような警告が。

シリアライズ可能クラス FooException は long 型の static final serialVersionUID フィールドを宣言していません

この警告の意味

参照: eclipseで出た警告について - QA@IT

なぜ独自の例外でserialVersionUIDを求められたのか。
それは、java.lang.ThrowableがSerializableを実装しているからです。
当然サブクラスも自動的に直列化の対象となる為、
serialVersionUIDが求められたわけです。

直列化の意味はよく分かりませんでしたが、どの経路から『serialVersionUID』を求められているのかは分かりました。
公式ドキュメントを確認したところ、たしかにインタフェース『Serializable』から端を発しているようです。

公式ドキュメント

この警告の抑止方法

三通りの方法があります。
3番が一番手軽だと思います。

1.『FooException』の中で『serialVersionUID』を明示的に定義し、適当な値を入れる。
private static final long serialVersionUID = 1234L;
2.『@SuppressWarnings』というアノテーションEclipseの警告を抑止する。
@SuppressWarnings("serial")
public class FooException extends Exception {
3.Eclipseの設定を変更する。(ウィンドウ→設定)

f:id:sutara_lumpur:20140313113150p:plain