「Effective Java, 2nd edition」本の項目 2 には、作成者がオブジェクトの空の初期化を禁止したいコードのスニペットがあります。
class Example {
private Example() {
throw new AssertionError();
}
}
ここで私を混乱させるのは、スローされる例外のタイプです。
AssertionError
より適切なエラーがないためにスローされるのか、それともこのようにする必要があるためにスローされるのか、私にはわかりません。
assert
私が理解しているように、このエラーは、ステートメントが失敗したときにフレームワークによってスローされます。また、javadoc に書かれているだけです
[AssertionError is] アサーションが失敗したことを示すためにスローされます。
しかし、ここで違反されているアサーション (true-false ステートメント) は見当たりません。もちろん、「このクラスのアイテムをインスタンス化してはならない」というステートメントに違反していますが、これがその背後にあるロジックである場合、すべてAssertionError
の場所で s をスローする必要があり、それは明らかに起こりません。
FWIW、私はちょうど投げたでしょう
new IllegalStateException("Must not instantiate an element of this class")
何か問題がありますか?AssertionError
自分のコードでをスローする必要があるのはどのような場合ですか?
微妙な疑いで申し訳ありませんが、コードでこのパターンを頻繁に使用しており、正しいことをしていることを確認したいと考えています。