Просматривая Joshua Bloch "Эффективное Java - второе издание", я наткнулся на следующий код на стр. 152:
double apply(double x, double y) {
switch(this) {
case PLUS: return x + y;
case MINUS: return x - y;
case TIMES: return x * y;
case DIVIDE: return x / y;
}
throw new AssertionError("Unknown op: " + this);
}
Теперь меня смущает то, что активно AssertionError. Это считается хорошей практикой?
К моему пониманию, утверждения используются, чтобы не перефразировать код таким образом, что при запуске java-программирования без утверждений и при этом утверждения-инструкции не выполняются, поведение не меняется.
Я был бы смущен, если бы я получил AssertionException, когда запускаю программу, даже не имея утверждений.
Несмотря на то, что я понимаю, что пример может происходить довольно часто, вы анализируете несколько разных параметров, и если это ни один из них, вы должны выбросить исключение.
Так что хорошая практика бросить здесь AssertionException, или было бы лучше бросить другую? Если да, то какой из них лучше всего подходит? Может быть IllegalArgumentException?
Изменить для пояснения: Мой вопрос не в том, нужно ли нам здесь Error, но если мы хотим выбросить Exception или Error, какой он должен быть? И хорошая практика активно бросить AssertionError s? В документации говорится, что Thrown указывает, что утверждение не сработало, поэтому у меня возникает ощущение, что мы не должны активно его бросать. Это правильно?
Второе редактирование: ясный вопрос: полезно ли активно перебрасывать AssertionError, или этого следует избегать, даже если это возможно? (Мое предположение, что чтение документов является последним)