Почему @ 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 46

1 ответ:

При компиляции проекта в IntelliJ IDEA он использует байт-код скомпилированных классов для добавления проверок во время выполнения для различных вариантов аннотаций @Nonnull. Это поведение контролируется параметром:

Параметры | сборки, выполнения, развертывания | компилятор | [х] добавить время выполнения утверждений для не-null-аннотированных методов и параметров.