Рубрики
Без рубрики

Использование Утверждений Java

Узнайте, как работать с утверждениями в Java, используя ключевое слово assert.

Автор оригинала: baeldung.

1. введение

Ключевое слово Java assert позволяет разработчикам быстро проверять определенные предположения или состояние программы.

В этой статье мы рассмотрим, как использовать ключевое слово Java assert .

2. История утверждений Java

Ключевое слово Java assert было введено в Java 1.4, поэтому оно существует уже довольно давно. Тем не менее, это остается малоизвестным ключевым словом, которое может значительно сократить шаблонность и сделать наш код более читабельным.

Например, часто в нашем коде нам необходимо проверять определенные условия, которые могут помешать правильной работе нашего приложения. Обычно мы пишем что-то вроде этого:

Connection conn = getConnection();
if(conn == null) {
    throw new RuntimeException("Connection is null");
}

Используя утверждения, мы можем удалить оператор if и throw с помощью одного оператора assert .

3. Включение утверждений Java

Поскольку утверждения Java используют ключевое слово assert , для импорта не требуются библиотеки или пакеты.

Обратите внимание, что до Java 1.4 Было совершенно законно использовать слово “assert” для именования переменных, методов и т. Д. Это потенциально создает конфликт имен при использовании более старого кода с более новыми версиями JVM.

Поэтому для обеспечения обратной совместимости JVM по умолчанию отключает проверку утверждений . Они должны быть явно включены с помощью аргумента командной строки -enableassertions или его сокращенного -ea:

java -ea com.baeldung.assertion.Assertion

В этом примере мы включили утверждения для всех классов.

Мы также можем включить утверждения для определенных пакетов и классов:

java -ea:com.baeldung.assertion... com.baeldung.assertion.Assertion

Здесь мы включили утверждения для всех классов в пакете com.baeldung.assertion .

Аналогично, они могут быть отключены для определенных пакетов и классов с помощью аргумента -отключить утверждения командной строки или его сокращения -da . Мы также можем использовать все четыре этих аргумента вместе.

4. Использование Утверждений Java

Чтобы добавить утверждения, просто используйте ключевое слово assert и задайте ему логическое условие :

public void setup() {
    Connection conn = getConnection();
    assert conn != null;
}

Java также предоставляет второй синтаксис для утверждений, который принимает строку, которая будет использоваться для построения AssertionError , если она будет выдана:

public void setup() {
    Connection conn = getConnection();
    assert conn != null : "Connection is null";
}

В обоих случаях код проверяет, возвращает ли соединение с внешним ресурсом ненулевое значение. Если это значение равно null, JVM автоматически выдаст Ошибку утверждения .

Во втором случае исключение будет содержать дополнительные сведения, которые будут отображаться в трассировке стека и могут помочь в отладке проблемы.

Давайте посмотрим на результат запуска нашего класса с включенными утверждениями:

Exception in thread "main" java.lang.AssertionError: Connection is null
        at com.baeldung.assertion.Assertion.setup(Assertion.java:15)
        at com.baeldung.assertion.Assertion.main(Assertion.java:10)

5. Обработка ошибки утверждения

Класс AssertionError расширяет Ошибку , который сам расширяет Выбрасываемый . Это означает, что AssertionError является непроверенным исключением.

Поэтому методы, использующие утверждения, не обязаны их объявлять, и дальнейший вызывающий код не должен пытаться их перехватить.

Ошибки утверждения предназначены для указания неисправимых условий в приложении, поэтому никогда не пытайтесь их обработать или попытаться восстановить.

6. Лучшие Практики

Самое важное, что нужно помнить об утверждениях, – это то, что их можно отключить, поэтому никогда не предполагайте, что они будут выполнены .

Поэтому при использовании утверждений имейте в виду следующее:

  • Всегда проверяйте наличие нулевых значений и пустых Необязательно при необходимости
  • Избегайте использования утверждений для проверки входных данных в общедоступном методе и вместо этого используйте непроверенное исключение, такое как Исключение IllegalArgumentException или Исключение NullPointerException
  • Не вызывайте методы в условиях утверждения, а вместо этого назначьте результат метода локальной переменной и используйте эту переменную с assert
  • Утверждения отлично подходят для мест в коде, которые никогда не будут выполнены, таких как по умолчанию случай оператора switch или после цикла, который никогда не заканчивается

7. Заключение

Ключевое слово Java assert доступно уже много лет, но остается малоизвестной особенностью языка. Это может помочь удалить множество шаблонного кода, сделать код более читабельным и помочь выявить ошибки на ранних этапах разработки программы.

Просто помните, что утверждения не включены по умолчанию, поэтому никогда не предполагайте, что они будут выполняться при использовании в коде.

Как всегда, полный исходный код доступен на GitHub .