2015-09-18 19 views
18

Androidで@NonNull注釈を使用したいと思いますが、正しい方法はありません。 私はあなたにこの例を提案している:私はdoStuff(null)を呼び出すときAndroidスタジオで@NonNullアノテーションを正しく使用する方法

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

だから、IDEは、私に警告を与えます。問題は、thisの質問のように、非常に遠くに伝播しないので、私はこの注釈に頼ることができないということです。だから私のように、私の方法ではnullチェックを入れたいのですが:

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

しかし、IDEは、そのs!=nullを想定し、s==nullは常に偽であることを私に警告します。私はこれを行うための最良の方法が何であるか知りたいと思います。

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

+1

を次のようにそれを行う - そこその警告を抑止するにはIDEのクイックフィックスでなければなりません。 「私は個人的には思っています...」 - あなたが好きなら、あなたは[機能要求を提出する]ことができます(https://code.google.com/p/android/issues/list)。 – CommonsWare

+0

@CommonsWare Android Studio 1.3.2で簡単な 'SuppressWarning'の修正がないようです – MMauro

+0

それは悪臭を帯びます。 :-( – CommonsWare

答えて

5

あなたは例えば、その特定のnullチェックの警告を無効にするには、コメントスタイルの抑制を使用することができます。:

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

あなたは、あなたがそれを行う//noinspection ConstantConditionsそのたびに必要になります。

9

これには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); 
    ... 
} 
+0

多分[この回答](http://stackoverflow.com/a/41679666/6287240)は便利です – TmTron

5

Google examples「私はこれを行うための最善の方法は何か知りたい」

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

... 

public void doStuff(@NonNull String sParm){ 
    this.sParm= checkNotNull(s, "sParm cannot be null!"); 
} 
関連する問題