Почему @ Nonnull аннотации проверяются во время выполнения?
У меня есть функция со следующей сигнатурой
public static String myFunction(@Nonnull String param)
Когда я вызываю его с параметром 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)
Явакс.аннотация.Поля не должны быть проверены во время выполнения.
Кто на самом деле создает исключение и почему?
P.S. Я запускаю сервер Tomcat в режиме отладки из IntelliJ IDEA 2016.3 с Oracle JDK 1.8.0_102
1 ответ:
При компиляции проекта в IntelliJ IDEA он использует байт-код скомпилированных классов для добавления проверок во время выполнения для различных вариантов аннотаций
@Nonnull
. Это поведение контролируется параметром:Параметры | сборки, выполнения, развертывания | компилятор | [х] добавить время выполнения утверждений для не-null-аннотированных методов и параметров.