2017-12-25 32 views
-1

私のコードには、APIからデータを取得する方法があります。RetrofitのonResponseメソッドで@ NonNullを使用してNull Safetyに適していますか?

public void getInitResponse() { 


     apiService.getInitResponse().enqueue(new Callback<InitGet>() { 

      @Override 
      public void onResponse(@NonNull Call<InitGet> call, @NonNull Response<InitGet> response) { 

       if (response.isSuccessful()) { 

        String aesKeyEncrypted = response.body().getAsKy(); 
        String aesIvEncrypted = response.body().getAsIv(); 


        } 
       } 
} 

getAsKyまたはgetAsIvメソッドはnullを返すことができます。この場合、@NonNull Call<InitGet> callを使用してよい解決策ですか?または、if-elseを使用してNULLポインタ例外を取得しないで単純なヌルチェックを行う必要がありますか?

答えて

1

@NonNull

はあなたのコードを変更しません、それはあなたがまだあなたがその注釈を使用してはならないnullを返すことができる場合"this code is not expected to return null"

そのための方法のクライアントに言うことマーカーです。

しかし、あなたは正しい軌道に乗っています。ヌルを返すことは望まないので、それは良いことです。

あなたが言ったように、あなたは「ヌル安全」である。このような何かにあなたの方法を変更することができますあなたのケースでは

@NonNull 
public String getFoo() { 
    String foo = something.getFoo(); 
    if(foo == null) { 
     return "Foo was null, but this is a nice msg for the UI."; // or similar 
    } else { 
     return foo; 
    } 
} 

「あなたはそれを持っているいずれか、またはあなたがドン何かのように聞こえる「キーはAES」あなたがしなければそれはかなり悪いです。

@NonNull 
public String getAesKey() { 
    String key = response.body().getAsKy(); 
    if(key == null) { 
     throw new IllegalStateException(new NullPointerException("Key was null, but we need a key or everything is broken! Fail fast.")); 
    } else { 
     return key; 
    } 
} 

ハッピークリスマス

:私はこれを行うだろう
関連する問題