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

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

1. Вступление

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

В этой статьеwe’ll take a look at how to use the Java assert keyword.

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

Ключевое слово Javaassert было введено в 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.

Следовательно, для обратной совместимостиthe JVM disables assertion validation by default. Они должны быть явно включены с помощью аргумента командной строки-enableassertions или его сокращения-ea:

java -ea com.example.assertion.Assertion

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

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

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

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

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

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

Чтобы добавить утверждения,simply use the assert keyword and give it a boolean condition:

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 будетautomatically throw an AssertionError.

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

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

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

5. ОбработкаAssertionError

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

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

AssertionErrors are meant to indicate unrecoverable conditions в приложении, поэтому никогда не пытайтесь обработать их или попытаться восстановить.

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

Самое важное, что нужно помнить об утверждениях, - это то, что их можно отключить, поэтомуnever assume they’ll be executed.

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

  • Всегда проверяйте наличие нулевых значений и пустыхOptionals там, где это необходимо

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

  • Не вызывайте методы в условиях утверждения, вместо этого присваивайте результат метода локальной переменной и используйте эту переменную сassert

  • Утверждения отлично подходят для мест в коде, которые никогда не будут выполнены, таких как случайdefault для оператораswitch или после цикла, который никогда не завершается

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

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

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

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