Отладка в 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]