Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 为什么SharedReferences.getString可能返回null?_Kotlin_Sharedpreferences - Fatal编程技术网

Kotlin 为什么SharedReferences.getString可能返回null?

Kotlin 为什么SharedReferences.getString可能返回null?,kotlin,sharedpreferences,Kotlin,Sharedpreferences,1) 在下面的图片中,我想了解为什么SharedReferences.getString()给我类型不匹配,它可能返回null,但SharedReferences.getBoolean()和SharedReferences.getInt()没有给我类型不匹配警告 2) 那么defValue呢,如果它没有找到SharedPrefKey.App_LANGUAGE它会返回en,这不是很重要吗?所以它不能返回null,wright 它调用可以返回字符串或null的Java代码。对于getBoolean

1) 在下面的图片中,我想了解为什么SharedReferences.getString()给我类型不匹配,它可能返回null,但SharedReferences.getBoolean()SharedReferences.getInt()没有给我类型不匹配警告

2) 那么defValue呢,如果它没有找到SharedPrefKey.App_LANGUAGE它会返回en,这不是很重要吗?所以它不能返回null,wright

  • 它调用可以返回字符串或null的Java代码。对于
    getBoolean()
    函数,该值只能为true或false。您不能将null填充到
    布尔值
    字段中

  • 正确,您正在定义一个默认值,以防它找不到任何东西。您还可以将
    null
    放在第二个参数中,与没有默认值时相同


  • SharedReferences
    界面中查看
    getString
    的实现

    @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。这就是为什么您看到了与您发布的示例在可空性方面的差异。

    我认为它是Java和
    String
    类型这一事实意味着它可以返回
    null
    @Nullable
    注释是IDE的助手。不管有没有注释,它都可能返回
    null
    。是的,但是没有注释,Kotlin不知道这一点。如果去掉注释,那么它将返回一个平台类型
    字符串
    和Kotlin不会将其视为可空。所以你不会犯那个错误。但是,如果它返回null agree,但是
    String,它就会崩溃
    仍然可以是
    null
    。我认为Kotlin假设
    字符串有点傻一个更正确的假设是
    String?
    ,它允许IDE帮助您将安全调用写入Java。是的,但问题是他为什么会出现类型不匹配错误。如果它没有标记为
    @Nullable
    ,则不会出现编译时错误。只有在
    字符串
    value返回
    null
    如果提供了
    getString
    的默认参数,为什么它仍然可以为null?