web-dev-qa-db-ja.com

実行時に@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) 

javax.annotation.Nonnullは実行時にチェックされないはずです。

誰が実際に例外をスローし、その理由は?

追伸IntelliJ IDEA 2016.3 with Oracle JDK 1.8.0_102からTomcatサーバーをデバッグモードで実行します

53
Dmitry

IntelliJ IDEAでプロジェクトをコンパイルすると、コンパイルされたクラスのバイトコードがインスツルメントされ、さまざまな@Nonnull注釈。この動作はオプションによって制御されます:

設定|ビルド、実行、展開|コンパイラ| [x]ヌルではない注釈付きのメソッドおよびパラメーターのランタイムアサーションを追加します。

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

82
yole