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チェックされていると文句を言う。
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);
...
}
Googleの例 次のようにします
import static com.google.common.base.Preconditions.checkNotNull;
...
public void doStuff(@NonNull String sParm){
this.sParm= checkNotNull(s, "sParm cannot be null!");
}
コメント形式の抑制を使用して、特定のnullチェック警告を無効にすることができます。例:
public MyMethod(@NonNull Context pContext) {
//noinspection ConstantConditions
if (pContext == null) {
throw new IllegalArgumentException();
}
...
}
あなたはそれが必要です//noinspection ConstantConditions
それを行うたびに。