80

「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自分のコードでをスローする必要があるのはどのような場合ですか?

微妙な疑いで申し訳ありませんが、コードでこのパターンを頻繁に使用しており、正しいことをしていることを確認したいと考えています。

4

5 に答える 5