57

次の署名を持つ関数があります

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

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

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

4

1 に答える 1

85

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

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

のスクリーンショット

于 2016-11-28T15:25:50.803 に答える