1)在下面的图片中,我想了解为什么 sharedPreferences.getString()给我键入不匹配的原因,它可能返回null,但 sharedPreferences.getBoolean()和< strong> sharedPreferences.getInt()不会给我输入类型不匹配的警告吗?
2)defValue怎么样?不是主要因为如果找不到 SharedPrefKey.App_LANGUAGE ,它将返回 en 吗?所以它不能返回null,是吗?
答案 0 :(得分:2)
在getString
界面中查看SharedPreferences
的实现。
@Nullable
String getString(String key, @Nullable String defValue);
该方法本身被标记为@Nullable
,这意味着它可以返回null。现在,如果您查看defValue
参数,您会注意到它也被标记为@Nullable
,这意味着您不必传递默认值。如果您正在寻找的字符串首选项不存在并且没有传递默认值,那么它将返回null。
int getInt(String key, int defValue);
boolean getBoolean(String key, boolean defValue);
如果您查看上面的getInt
和getBoolean
的实现,则可以告诉您必须传递默认值,因此它永远不会为null。这就是为什么您看到的示例与可空性有所不同的原因。
答案 1 :(得分:1)
正在调用可以返回String或null的Java代码。对于getBoolean()
函数,该值只能为true或false。您不能将null填充到boolean
字段中。
正确,您正在定义一个默认值,以防找不到任何内容。您还可以将null
放在第二个参数中,这与没有默认值的情况相同。