Dlaczego adnotacja @ Nonnull sprawdzana w czasie wykonywania?

Mam funkcję z następującym podpisem

public static String myFunction(@Nonnull String param)

Kiedy wywołuję go z param jako null, otrzymuję następujący wyjątek:

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.adnotacja.Nonnull nie powinien być sprawdzany w czasie wykonywania.

Kto tak naprawdę rzuca wyjątek i dlaczego?

P. S. uruchamiam serwer Tomcat w trybie debugowania z IntelliJ IDEA 2016.3 z Oracle JDK 1.8.0_102

Author: Dmitry, 2016-11-28

1 answers

Kiedy kompilujesz swój projekt w IntelliJ IDEA, ustawia on kod bajtowy skompilowanych klas, aby dodać testy uruchomieniowe dla różnych smaków adnotacji @Nonnull. To zachowanie jest kontrolowane przez opcję:

Settings | Build, Execution, Deployment | Compiler | [x] Add Runtime assertions for not-null-adnotated methods and parameters.

 75
Author: yole,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-28 15:25:50