@Nonnull アノテーションが実行時にチェックされるのはなぜですか? 質問する

@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 は実行時にチェックされないはずです。

実際に例外をスローするのは誰ですか、またその理由は何ですか?

PS 私はIntelliJ IDEA 2016.3とOracle JDK 1.8.0_102からデバッグモードでTomcatサーバーを実行しています

ベストアンサー1

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

設定 | ビルド、実行、デプロイメント | コンパイラ | [x] null 注釈が付けられていないメソッドとパラメータのランタイムアサーションを追加します。

「notnull アノテーションが付けられたメソッドとパラメータにランタイムアサーションを追加する」のスクリーンショット。

おすすめ記事