33

これについて IntelliJ の「NullableProblems」インスペクションから警告が表示されるのはなぜですか。

public class Test implements Comparable<Test> {
    @Override
    public int compareTo(Test o) {
        return 0;
    }
}

IntelliJ 14.1.4 を使用し、Java 1.7 でコンパイルしています

スクリーンショット:

ここに画像の説明を入力

引数の前に追加@NotNullしても役に立ちません:

ここに画像の説明を入力

4

3 に答える 3

24

からComparable.compareTo:

@throws NullPointerException if the specified object is null

そのため、IntelliJ は、オブジェクトがそうであってはならず、注釈を自動的nullに追加することを認識しています。@NotNull

IntelliJ IDEA は SDK とライブラリのバイトコードを注意深く調べ、これらの注釈を自動的に推測して、後でソースコードを分析して null を見落とした場所を特定するために使用できるようにします。

オーバーライドされたメソッドにはこの注釈が含まれていないため、この動作をオーバーライドしてパラメーターを null 可能にします -Comparableインターフェイスの契約に反します。

パラメータの前に追加することでこれを解決でき@NotNullます。

Alt+を押しEnter、ポップアップメニューで警告を選択Disable inspectionし、サブメニューで選択することで、この検査を無効にすることもできます。

/注釈の詳細については、Web ヘルプこのスレッドを参照してください。@NotNull@NonNull

于 2015-07-06T09:56:27.657 に答える
13

これは、IntelliJ IDEA で簡単にグローバルに構成でき、個人的には推奨される方法です。必要に応じて、独自の注釈を追加できます。
すなわちjavax.validation.constraints.NotNull

設定へのパス:
Settings > Editor > Inspections > @NotNull/@Nullable problems > Configure annotations

いくつかのスクリーンショット: ここに画像の説明を入力 ここに画像の説明を入力

于 2016-11-03T08:26:18.987 に答える
-1

@NotNull注釈 を持たないメソッドをオーバーライドしているためです。

@NotNullオーバーライドするメソッドにアノテーションがない場合、IntelliJ IDEA は警告します。

于 2015-07-06T09:47:36.580 に答える