バグ発生時に投げるべき例外

「メソッドを呼ぶ前提条件が間違っている(ユーザによるミス)」時の例外は、IllegalStateExceptionですよね。そして「引数が間違ってる(ユーザミス)」時はIllegalArgumentException。

しかし「バグが発生した(API提供側のミス)」時に投げるべき例外って、何がいいんでしょう? 例えば「ここには絶対到達しない、ホントは」って場所に書いておくもの。

Effective Java 第2版 (The Java Series)だと、そういったポイントでは AssertionError を投げていますが、Errorを投げるって邪悪じゃねーかなぁ…ww しかも、AssertionError って assert文の評価失敗の時に投げられるものですよね。VMの起動引数に -ea が付いていないときは、むしろ「投げちゃいけないモノ」なんじゃないかな、と…。

さてさて…。単純にRuntimeExceptionを継承して、何か新しい例外を作ってしまうしかないのかな?