さだまさし「変数宣言」

俺より前に、変数を使ってはいけない  俺より後に(なるべく)オーバーライドしてもいけない  変数名はうまくつけろ いつもきれいに書け できる範囲で 構わないから♪

Javaの例外(エクセプション)に総称型(ジェネリクス)を使う(1)

はじめに

Javaでは、変数の型については総称型や可変引数を使って柔軟に使うことができる。
一方で、変数に比べて例外は柔軟に使えるようになってきているのだろうか?
その辺を考えてみようと思う。

単純な例

クラスへの型引数として、例外型Eを与えたとすると、主に以下の二つが可能になります。

  • 変数宣言時まで、投げる具体的なエクセプションの指定を遅らせることができる。
  • 実行時例外と、それを継承する例外を指定した場合は、try-catch文を省略できる。

// 例外型E は、変数宣言時に与えられます
public class Hoge<E extends Exception> {
   
   // この関数は、例外 E を投げます
   public void myFunction() throws E {}

   public static void main(String... args) {

      // 例外引数として IOExceptionを与える
      Hoge<IOException> myHoge = new Hoge<>();
      try{
         myHoge.myFunction();
      catch(IOException e) { // IOExceptionでcatchする
         e.printStackTrace();
      }

      // 例外引数として IOExceptionを与える
      Hoge<NullPointerException> myHoge = new Hoge<>();
      try{
         myHoge.myFunction();
      catch(NullPointerException e) { // NullPointerExceptionでcatchする
         e.printStackTrace();
      }
      
      Hoge<RuntimeException> myHoge = new Hoge<>();
      myHoge.myFunction(); // ここでtry-catchを書かなくても、コンパイルエラーにならない!
   }
}

この内容に関連する本

  • Javaの初心者は順序立てて説明してくれる結城さんの本がお勧めです。私もこの本で勉強しました。

Java言語プログラミングレッスン 第3版(上)Java言語プログラミングレッスン 第3版(下)

  • デザインパターンの初心者は、具体例が多い結城さんの本がお勧めです。私もこの本で勉強しました。

増補改訂版Java言語で学ぶデザインパターン入門

  • 例外処理の定石やよくあるパターンは、EffectiveJavaがお勧めです。私もこの本で勉強しました。

Effective Java 第2版 (The Java Series)