The King's Museum

ソフトウェアエンジニアのブログ。

【Effective Java】項目60:標準例外を使用する

Java ではほとんどの場面で必要となる基本的な例外が標準ライブラリに含まれています。

すでに用意されている標準の例外を再利用することには次のような利点があります。

  • コードを確立されている慣例と一致させることができる
  • 見慣れた例外によってコードの読みやすさが向上する
  • ロードするクラスが少ないことで空間効率・時間効率が向上する

ただし、スローしようとしている例外が標準例外に合致しない場合、新たな例外を作ることを検討してください。 例外の再利用では、例外の名前が合致していることではなくセマンティクスが一致していることが重要です。

標準例外

用意されている例外の中で、最もよく利用される例外は次のようなものです。

  • IllegalArgumentException
  • IllegalStateException
  • NullPointerException
  • IndexOutOfBoundsException
  • ConcurrentModificationExcetpion
  • UnsupportedOperationException

IllegalArgumentException

これはメソッドに不適切な値の引数を渡した場合にスローされる例外です。

たとえば、処理を繰り返し回数を与えるメソッドに負の値を与えた場合などにスローされる例外です。

IllegalStateException

メソッドのレシーバーとなるオブジェクトの状態が不正な場合にスローされる例外です。

たとえば、初期化が必要なオブジェクトに対して、初期化せずにメソッドを呼び出した場合などにスローするべき例外です。

NullPointerException

null が禁止されている引数に対して、null が与えられた場合にスローされる例外です。

通常、不正な引数の場合は IllegalArgumentException がスローされます。 ただし、null が禁止されている引数に null が与えられた場合には NullPointerException をスローするのが慣例です。

IndexOutOfBoundsException

配列やリストのインデックスを表す引数に範囲外の値が与えられた場合にスローされる例外です。

通常、不正な引数が与えられた場合には IllegalArgumentException がスローされます。 しかし、インデックスを表す引数に範囲外の値が与えられた場合には慣例として IndexOutOfBoundsException をスローします。

ConcurrentModificationExcetpion

特定のスレッドからのみ変更されるべきオブジェクトが並行で変更されようとしたときにスローされる例外です。

UnsupportedOperationException

オブジェクトがそのメソッドを実装していない場合などに呼び出されるメソッドです。

通常、オブジェクトはメソッドを正しく実装しているため、この例外を利用する頻度は低いです。 インタフェースを実装したクラスで特定の操作をサポートしてない場合などに利用できます。

(c) The King's Museum