【问题标题】:SharedPreferences in static method - Lint warning "might be null" despite passing a defaultValue?静态方法中的 SharedPreferences - 尽管传递了 defaultValue,但 Lint 警告“可能为空”?
【发布时间】:2019-06-21 22:23:12
【问题描述】:

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

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) 中的第二个参数可能为空。
这个怎么可能? 当在 SP 中找不到任何东西时,我没有传递 static 默认值吗?

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

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

是什么原因造成的,我怎样才能让它安全?

【问题讨论】:

    标签: java android sharedpreferences


    【解决方案1】:

    怎么可能?

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

    当在 SP 中找不到任何内容时,我是否没有传递静态默认值?

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

    我怎样才能让它安全?

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

    【讨论】:

    • 但是有没有getString()可以返回null的情况?它不总是得到传递给它的默认值吗?我很困惑为什么它可以为空。另外,消除警告的正确方法是什么,只需断言!= null
    • @Big_Chair:“但是有没有 getString() 可以返回 null 的情况?” --当然:getString("key", null)。 “它不总是得到一个默认值传递给它吗?” -- 并且该默认值可以是null。 “此外,消除警告的正确方法是什么”——GlobalVariables.APP_VERSION_HOW 的某些内容导致 Lint 认为它可能是 null。我可以让该警告出现的唯一方法是硬编码null (getString("key", null))。
    猜你喜欢
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 2015-05-25
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多