Використання тверджень Java

1. Вступ

Ключове слово Java assert дозволяє розробникам швидко перевірити певні припущення або стан програми.

У цій статті ми розглянемо, як використовувати ключове слово Java assert .

2. Історія тверджень Java

Ключове слово Java assert було введено в Java 1.4, тому воно існує досить давно. Однак воно залишається маловідомим ключовим словом, яке може різко зменшити шаблон і зробити наш код більш читабельним.

Наприклад, часто в нашому коді нам потрібно перевірити певні умови, які можуть заважати нашій програмі працювати належним чином. Зазвичай ми писали б щось подібне:

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

Використання тверджень можна видалити , якщо і кинути заяву з однієї 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 .

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

4. Використання Java Assertions

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

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

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

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

В обох випадках код перевіряє, чи підключення до зовнішнього ресурсу повертає ненульове значення. Якщо це значення є нульовим, JVM автоматично видасть AssertionError .

У другому випадку виняток матиме додаткову деталь, яка відображатиметься у трасі стека і може допомогти у налагодженні проблеми.

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

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 розширює Error , який сам поширює Throwable . Це означає, що AssertionError є неперевіреним винятком.

Тому методи, які використовують твердження, не вимагають їх декларувати, а подальший викличний код не повинен намагатися їх зловити.

AssertionErrors покликані вказувати на невиправні умови в програмі, тому ніколи не намагайтеся обробляти їх або намагатися відновити.

6. Кращі практики

Найголовніше, що слід пам’ятати про твердження, це те, що їх можна відключити, тому ніколи не припускайте, що вони будуть виконані .

Тому майте на увазі наступні речі, використовуючи твердження:

  • Завжди перевіряйте наявність нульових значень та порожніх додаткових параметрів, де це доречно
  • Уникайте використання тверджень для перевірки входів у загальнодоступний метод, і замість цього використовуйте неперевірений виняток, такий як IllegalArgumentException або NullPointerException
  • Не викликайте методи в умовах твердження, а замість цього призначайте результат методу локальній змінній і використовуйте цю змінну з assert
  • Твердження чудово підходять для місць у коді, які ніколи не будуть виконані, наприклад, типовий випадок оператора switch або після циклу, який ніколи не закінчується

7. Висновок

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

Тільки пам’ятайте, що твердження не ввімкнені за замовчуванням, тому ніколи не припускайте, що вони будуть виконані при використанні в коді.

Як завжди, повний вихідний код доступний на GitHub.