Просматривая 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
, или этого следует избегать, даже если это возможно? (Мое предположение, что чтение документов является последним)