Что такое 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.