web-dev-qa-db-ja.com

Android Studioで@NonNullアノテーションを使用する正しい方法

Androidで_@NonNull_アノテーションを使用したいのですが、正しい方法がわかりません。この例を提案します。

_public void doStuff(@NonNull String s){
     //do work with s...    
}
_

したがって、doStuff(null)を呼び出すと、IDEで警告が表示されます。問題は this のように、この注釈に依存できないことです指摘したように、それらはあまり伝播しないので、次のように、メソッドにnullチェックを設定します。

_ if(s==null) throw new IllegalAgrumentException();
_

しかし、IDEは、_s!=null_であると仮定すると、_s==null_が常にfalseであることを警告します。これを行うための最良の方法を教えてください。

私は個人的に、onlyがnullが渡されないことをチェックして警告する_@ShouldntBeNull_のような注釈があるはずだと思いますが、はしません'tは、値がnullチェックされていると文句を言う。

25
MMauro

Objects.requireNonNull を使用できます。内部でチェックを実行し(IDEは関数に警告を表示しません)、パラメータがnullの場合は NullPointerException を発生させます。

public MyMethod(@NonNull Context pContext) {
    Objects.requireNonNull(pContext);
    ...
}

別の例外をスローするか、APIレベル<19を使用する場合は、独自のヘルパークラスを作成して同じチェックを実装できます。例えば.

public class Check {
    public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new IllegalArgumentException();
        return obj;
    }
}

そしてそれを次のように使用します:

public MyMethod(@NonNull Context pContext) {
    Check.requireNonNull(pContext);
    ...
}
13
TmTron

Googleの例 次のようにします

import static com.google.common.base.Preconditions.checkNotNull;

...

public void doStuff(@NonNull String sParm){
     this.sParm= checkNotNull(s, "sParm cannot be null!");
}
8
user60108

コメント形式の抑制を使用して、特定のnullチェック警告を無効にすることができます。例:

    public MyMethod(@NonNull Context pContext) {
        //noinspection ConstantConditions
        if (pContext == null) {
            throw new IllegalArgumentException();
        }
        ...
    }

あなたはそれが必要です//noinspection ConstantConditionsそれを行うたびに。

6
Darrell