最も簡単な方法で独自の例外クラスを定義しようとしたところ、このような結果になってしまいました。
public class MyException extends Exception {}
public class Foo {
public bar() throws MyException {
throw new MyException("try again please");
}
}
これはJavaコンパイラが言っていることです。
cannot find symbol: constructor MyException(java.lang.String)
このコンストラクタは、java.lang.Exception
を継承しなければならないような気がしたのですが、そうではないのでしょうか?
デフォルト以外のコンストラクタを継承するのではなく、クラス内で String を受け取るコンストラクタを定義する必要があります。一般的には、コンストラクタの中で super(message)
を使用して、親のコンストラクタを呼び出します。例えば、このように。
public class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
私が定義する典型的なカスタム例外は次のようなものです。
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
public CustomException(String message, Throwable throwable) {
super(message, throwable);
}
}
何度も書く必要がないように、Eclipseを使ってテンプレートも作っています。