web-dev-qa-db-fra.com

Pourquoi l'annotation @Nonnull est-elle vérifiée au moment de l'exécution?

J'ai une fonction avec la signature suivante

public static String myFunction(@Nonnull String param)

Lorsque je l'appelle avec param comme nul, j'obtiens l'exception suivante:

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 est supposé ne pas être vérifié au moment de l'exécution.

Qui lève l'exception et pourquoi?

P.S. J'exécute le serveur Tomcat en mode débogage à partir d'IntelliJ IDEA 2016.3 avec Oracle JDK 1.8.0_102

53
Dmitry

Lorsque vous compilez votre projet dans IntelliJ IDEA, il instrumente le bytecode des classes compilées afin d’ajouter des contrôles d’exécution pour les différentes versions de @Nonnull annotations. Ce comportement est contrôlé par l'option:

Paramètres | Construction, exécution, déploiement | Compilateur | [x] Ajoutez des assertions d'exécution pour les méthodes et les paramètres non-annotés.

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

82
yole