Что такое AssertionError? В каком случае я должен его возбуждать в собственном коде?

В пункте 2 книги "Effective Java, 2nd edition" есть этот фрагмент кода, в котором автор хочет запретить пустую инициализацию объекта.

class Example {
    private Example() {
        throw new AssertionError();
    }
}

Меня сбивает с толку тип возбуждаемого исключения.

Я не понимаю, почему возбуждается AssertionError. То ли из-за отсутствия более подходящего типа исключения, то ли потому, что так просто должно быть.

Насколько я понимаю, это исключение возбуждается, когда не проходит проверка assert. Также в javadoc просто написано

[An AssertionError is] Thrown to indicate that an assertion has failed.

Но я не вижу, чтобы здесь выполнялся какой-либо assert (проверка истинного-ложного утверждения). Конечно, утверждение "Вы не должны создавать экземпляр элемента этого класса" было нарушено, но если следовать этой логике, то мы все должны возбуждать AssertionError повсеместно, а это явно не то, что мы делаем.

Чего бы это не стоило, я бы возбудил

new IllegalStateException("Must not instantiate an element of this class")

Что с этим не так? В каких случаях я должен возбуждать AssertionError в собственном коде?

Извините, просто у меня есть небольшое сомнение, потому что я очень часто использую этот паттерн в собственном коде и я хочу быть уверенным, что я всё делаю правильно.


Перевод вопроса участника doplumi.


Ответы (1 шт):

Автор решения: Михаил Муругов

Смысл AssertionError состоит в том, что произошло то, что разработчик считал невозможным.

Таким образом, если когда-либо возникает AssertionError, это явный признак ошибки программирования


Перевод ответа участника Henry.

→ Ссылка