Я использовал утверждения гораздо больше, когда писал на C++, чем в Java. Я не использую их так сильно, потому что они мне больше не нужны. Многие из ошибок C++, которые я пытаюсь поймать с утверждениями, уже не являются проблемой в Java.
Сказав это, утверждения очень ценны, но многие люди не используют их отчасти потому, что не понимают их. Я слышал, как люди жалуются, что они выбрасывают ошибку вместо исключения. Я также слышал этот вопрос: почему бы вам просто не использовать исключение и не обрабатывать это дело, а не использовать assert?
Мой ответ на оба одинаковых. Утверждения не должны ловить случаи, которые вы ожидаете увидеть в рабочем приложении. Цель утверждений - поймать ошибки. Вы должны использовать их только там, где единственный способ «обработать» их - это вернуться и исправить код. Вот почему они не бросают исключений - вы не хотите, чтобы они были частью вашей общей обработки исключений.
Что касается включения, моя IDE настроена на включение по умолчанию. Итак, для моего внутреннего тестирования я всегда знаю, что они работают.
Вот пример, где утверждение - единственное, что нужно использовать: я работал над большим проектом Swing, где исходные кодеры не понимали, что пользовательский интерфейс может быть обновлен только из потока событий, что привело к разным видам ошибок. Поэтому я вложил это утверждение во множество мест, где дела обстояли смешно: assert EventQueue.isDispatchThread(); Если это утверждение было уволено, мы бежали с неправильной нити, и разработчикам нужно было получить уведомление, чтобы они могли переместить код в нужную нить. Нет никакого способа справиться с этим в рабочем приложении.
«не включен по умолчанию» немного запутанным. Для автономного приложения java вкладчик может включать и выключать его бесплатно. Для управляемых сред (JEE, серверы) он иногда включается по умолчанию - SAP Cloud Platform для интеграции на примере использует Java-утверждения с эффектами Groovy. –