2017-12-23 11 views
0

Androidライブラリの一般的なチェックを抽象化し、Nullabilityアノテーションを同時に追加しようとしていますが、警告が表示されています。ヌルチェックが別のメソッド/クラスにある場合の@NonNullの使用

のは、私はこのライブラリの例の方法を持っているとしましょう:

その後、いくつかの処理のためのライブラリの別の内部メソッドを呼び出します
public int method(@Nullable final String param) { 
    final int precheckResult = LibPrechecks.checkForMethod(param); // Does check for param not being null 
    if (LibPrechecks.checksFailed(precheckResult)) { 
     return precheckResult; 
    } 

    // Rest of logic 
    return internalMethod(param); // IDE is complaining that param cannot be null 
    } 

:「事前チェック」

 private int internalMethod(@NonNull String param) { 
     // processing logic 

     return 0; 
     } 

をそして、ここでの例でありますクラス:

public class LibPrechecks { 

    public static int checkForMethod(@Nullable final String param) { 
    if (param == null) { 
     return -1; 
    } 
    return 0; 
    } 

    public static boolean checksFailed(final int precheckResult) { 
    return precheckResult < 0; 
    } 
} 

nullにエラーコードを戻しています内部メソッドがparamで呼び出されるまでにnullではないが、IDEはまだ不満であり、paramがnullである可能性があると考えます。 Android Studioでこの警告を修正し、これを適切に行うにはどうすればよいですか?

答えて

0

checkForMethod()またはchecksFailed()がIDEに認識されないので、IDEが静的に解析して、paramがヌルでないことを示す警告を表示するか、コードを書き込む必要があります。

私は、プリチェックコードが実行された後にparamがヌルではないと主張することが最善の策だと思います。どちらの

assert param != null; 

または

if (param == null) throw new AssertionError(); 

動作します。

関連する問題