我有一个检索数据库实例的静态方法:
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/