2017-12-25 24 views
-1

내 코드에는 API에서 데이터를 가져 오는 메소드가 있습니다.Nro Safety에 적합한 Retrofit의 onResponse 방법에서 @NonNull을 사용하고 있습니까?

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"

따라서 방법의 클라이언트에 말을 마커입니다.

하지만 올바른 길을 가고 있습니다. null을 반환하고 싶지 않으므로 좋은 일입니다.

당신이, 당신은 "안전 널 (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; 
    } 
} 

해피 크리스마스