Почему аннотация @Nonnull проверяется во время выполнения?
У меня есть функция со следующей сигнатурой
public static String myFunction(@Nonnull String param)
Когда я вызываю его с параметром как null, я получаю следующее исключение:
Caused by: java.lang.IllegalArgumentException: Argument for @Nonnull parameter 'param' of com/MyClass.myFunction must not be null
at com.MyClass.$$$reportNull$$$0(MyClass.java)
javax.annotation.Nonnull предполагается не проверять во время выполнения.
Кто на самом деле выдает исключение и почему?
P.S. Я запускаю сервер Tomcat в режиме отладки от IntelliJ IDEA 2016.3 с помощью Oracle JDK 1.8.0_102
Ответы
Ответ 1
Когда вы компилируете свой проект в IntelliJ IDEA, он обрабатывает байт-код скомпилированных классов, чтобы добавить проверки во время выполнения для различных разновидностей аннотаций @Nonnull
. Это поведение контролируется параметром:
Настройки | Сборка, выполнение, развертывание | Компилятор | [x] Добавьте утверждения времени выполнения для не аннотированных аннотацией методов и параметров.
![Screenshot of "Add runtime assertions for notnull-annotated methods and parameters.]()