Подтвердить что ты не робот

Почему аннотация @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

4b9b3361

Ответ 1

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

Настройки | Сборка, выполнение, развертывание | Компилятор | [x] Добавьте утверждения времени выполнения для не аннотированных аннотацией методов и параметров.

Screenshot of "Add runtime assertions for notnull-annotated methods and parameters.