Errorをthrowする例。

以上のように、Errorをthrowしている例も少なからず存在します。特定の条件さえ満たせば、Errorをthrowすることも問題がないと考えています。

Errorを投げる身近な例というか、一般的なプログラマでも書きそうなシチュエーションというとCloneableをimplementsしてcloneメソッドをオーバーライドするときとか…。

class Hoge implements Cloneable {
  @Override
  public Hoge clone() {
    try {
      return (Hoge) super.clone();
    } catch (CloneNotSupportedException e) {
      throw new Error(e);
    }
  }
}

super.clone()では、Cloneableをimplementsしたので例外はスローされないはずですが、例外スローが宣言されているのでcatchするか例外スローの可能性を再宣言する必要がある。だけど出ないハズのものをわざわざ宣言しても無駄なのでcatch。

それでも、もしCloneNotSupportedExceptionがスローされるというならば、JVMがおかしいと思われるので、Errorをスローするのが適切…、といった感じでしょうか。