java - 静态方法中的 SharedPreferences - 尽管传递了默认值,但 Lint 警告 "might be null"?

标签 java android sharedpreferences

我有一个检索数据库实例的静态方法:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
GlobalVariables.appVersion = sharedPreferences.getString(GlobalVariables.SHARED_PFC_APP_VERSION_KEY, GlobalVariables.APP_VERSION_HOW);

return makeInstance(context, GlobalVariables.appVersion);

GlobalVariables 类是完全静态的,所有变量也是最终静态的。

现在 Lint 警告我 return makeInstance(context, GlobalVariables.appVersion) 中的第二个参数可能为 null。
怎么可能? 当在 SP 中找不到任何内容时,我是否没有传递一个静态默认值?

它不能是 GlobalVariables 值本身,因为它们都是静态的,如果我只是将它分配给没有 SP 的 appVersion,它就可以工作。
我怀疑这可能是因为 context 参数,但即使是 if != null 安全检查也不会删除此警告。

这是否意味着 SharedPreferences 实例在那种情况下可以为空?

是什么原因造成的,我该如何保证安全?

最佳答案

How can that be?

getString() 方法被标记为返回一个 @Nullable 值。

Am I not passing a static default value for when nothing is found in the SP?

这并没有改变 getString() 方法被标记为返回一个 @Nullable 值的事实。 Lint 不知道在这种特殊情况下该方法不可能返回 null

how can I make it safe?

假设 GlobalVariables.APP_VERSION_HOW 不是 null,它就已经安全了。

关于java - 静态方法中的 SharedPreferences - 尽管传递了默认值,但 Lint 警告 "might be null"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56711052/

相关文章:

java - 在 java 构造函数中声明 ArrayList

android - 更新 google play 服务(8.1 至 8.3)后应用程序无法安装

android - 从共享首选项打开/关闭 Toast?

java - 存储 Location 对象的好方法是什么?

Java calendar.getTimeInMillis() 返回额外的零?

java - 单击按钮后更改框架的内容 Pane

java - 如何避免方法参数混淆?

sharedpreferences - Xamarin Forms Sharedpreferences 交叉

java - 不同的舍入方法似乎不起作用

java - 在 Android 上更改评级栏