在Retrofit中使用@NonNull onResponse方法对Null Safety有用吗?

时间:2017-12-25 11:00:35

标签: android retrofit retrofit2

在我的代码中,有一种方法可以从API中获取一些数据。

方法可以返回null。在这种情况下使用@NonNull Call<InitGet> call是不是很好的解决方案?或者我应该使用if-else进行简单的空检查以获取空指针异常?

1 个答案:

答案 0 :(得分:2)

@NonNull

不会更改您的代码,它是向客户说明方法的标记"this code is not expected to return null"

因此,如果仍然可以返回null,则不应使用该注释。

但是:-)你走在正确的轨道上 - 不想返回null,所以这是一件好事。

就像你说的那样,你可以将你的方法改为像“null safe”这样的东西:

@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 key”听起来像是你拥有它或者你没有它的东西 - 如果你没有,那么它非常糟糕。我会这样做:

@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;
    }
}

圣诞快乐