Java: Eclipseでユーザ定義例外のクラスを作ったら警告が表示された
下記のようなユーザ定義例外をEclipseで作りました。
public class FooException extends Exception {
すると下記のような警告が。
シリアライズ可能クラス FooException は long 型の static final serialVersionUID フィールドを宣言していません
この警告の意味
なぜ独自の例外で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の設定を変更する。(ウィンドウ→設定)