В пункте 2 книги "Эффективное Java, 2-е издание" есть этот фрагмент кода, в котором автор хочет запретить пустую инициализацию объекта.
class Example {
private Example() {
throw new AssertionError();
}
}
Тип брошенного исключения, вот что меня смущает.
Я не понимаю, выбрано ли AssertionError
только из-за отсутствия более подходящих ошибок или потому, что это должно быть так.
Как я понимаю, эта ошибка генерируется каркасом, когда оператор assert
терпит неудачу. Кроме того, в javadoc он просто написал
[AssertionError] Брошено, чтобы указать, что утверждение не сработало.
Но я не вижу никакого утверждения (true-false statement), которое нарушается здесь.
Конечно, "Вы не должны создавать экземпляр этого класса" было нарушено, но если это логика этого, тогда мы все должны бросать AssertionError
всюду, и это, очевидно, не так.
FWIW, я бы просто бросил
new IllegalStateException("Must not instantiate an element of this class")
С этим что-то не так? В каком случае я должен бросать AssertionError
в свой собственный код?
Извините, если это просто тонкое сомнение, но я часто использую этот шаблон в своем коде, и я хочу убедиться, что я поступаю правильно.