Я использую утверждения в 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(и типа утверждения) достаточно, чтобы быть более или менее уверенным, что трассировка стека будут предоставлены в случае найденных ошибок?
