Я использую утверждения в Java стандартным образом, включив их в своей среде IDE. Поэтому они не являются частью выпуска продукции. В последнее время я видел примеры кода с throw new AssertionError()
, и я начал думать о ситуации, когда AssertionError
следует использовать вместо утверждения.
Мое предположение заключается в том, что основное отличие заключается в возможности использования утверждений, поэтому они не замедляют производительность, и поэтому они могут встречаться довольно часто в коде, но затруднительно исправлять ошибки, которые могут быть воспроизведены пользователями.
Для AssertionError
применяется обратное.
Я также нахожу AssertionError
более практичным в местах в коде, где выполнение не должно быть получено, вместо использования assert false //We should not be here
. Особенно, если требуется возвратное значение. Например:
int getFoo(AnEnum a){
if (a == AnEnum.ONE)
return bar();
else if (a == AnEnum.TWO)
return SOME_VALUE;
//else
assert false; //throw new AssertionError();
return -1; //not necessary when usin AssertionError
}
- Правильно ли мои рассуждения?
- Каковы другие различия/примеры использования/лучшие практики/ограничения любого подхода?
- В отношении предоставления описания в
AssertionError
- если оно предусмотрено или является просто фактом, что этоError
(и типа утверждения) достаточно, чтобы быть более или менее уверенным, что трассировка стека будут предоставлены в случае найденных ошибок?