使用nonNull默认字符串的getSharedPreferences()。getString(name,default)的参数可能为null。

时间:2019-04-30 22:09:18

标签: android

我不明白为什么Android Studio无法这么说,尽管SharedPreferences将getString的defValue声明为@Nullable,但当前值实际上不是null!

以下调用的结果:

  myFunction(getSharedPreferences().getString(MY_SETTING_NAME.name(), "This string is not null"))

将触发警告:

 Argument might be null

怎么可能?由于defValue实际上不是null,我们知道它...

1 个答案:

答案 0 :(得分:0)

Android框架不使用Kotlin contracts,并且无法根据您传递的@Nullable是否为空来更改返回值上的defValue注释。

作为替代方案,您应该考虑使用Kotlin的elvis operator并编写如下代码:

myFunction(getSharedPreferences().getString(MY_SETTING_NAME.name(), null)
    ?: "This string is not null")

正确评估为非null