Отладка в Java с предварительными условиями

Работая с кодовой базой Chromium, я привык к таким макросам, как CHECK(condition);, DCHECK(contidtion) а также NOTREACHED;, Они вводят утверждения (обычно предварительные условия) в код и позволяют завершить программу с некоторой информацией в журнале, в отладочной сборке. DCHECK а также NOTREACHED также остановит отладчик для расследования дела. Первый активен только в режиме выпуска, а два последних только в режиме отладки - если "неактивны", они будут заменены пустым макросом и не вызовут никаких накладных расходов.

Есть ли какая-нибудь библиотека в Java, которая позволяет такую ​​вещь? Я знаю, что мог бы создать некоторый статический метод / объект и в зависимости от конфигурации подкачки конфигурации, но я не могу найти способ избежать создания накладных расходов. Кроме того, я бы не хотел изобретать велосипед.

2 ответа

Решение

Вы можете использовать assert ключевое слово:

public void yourMethod(String arg) {
    assert arg != null : "arg may not be null";
    // ...
}

что эквивалентно

public void yourMethod(String arg) {
    if (arg == null) throw new AssertionError("arg may not be null");
    // ...
}

Утверждения отключены, если -ea Переключатель задается при запуске JVM и при отключении будет иметь значение, близкое к 0.

Эквивалентно NOTREACHED было бы assert false;

Связанный: Что делает ключевое слово "assert"?

Я создал библиотеку, которая помогает писать предусловия, постусловия с акцентом на удобочитаемость. Например:

// Input
List<Integer> actual = Arrays.asList(2, 3, 4, 6);
List<Integer> expected = Arrays.asList(1, 3, 5);
requireThat(actual, "actual").containsAll(expected);

// Output
java.lang.IllegalArgumentException: actual must contain all elements in: [1, 3, 5]
Actual : [2, 4, 6]
Missing: [1, 5]
Другие вопросы по тегам