12. Null安全

Kotlin的 String 类型是不可以为Null的。如果你需要它有值为 Null 的情况存在,需要使用 String? 类型。
下面这个函数,系统会提示 null 位置“Null can not be a value of a non-null type String”

fun getName():String{
    return null
}

我们需要把它修改为下面这个样子才可以无报错

fun getName():String?{
    return null
}

是的,在 String 后面加上一个 ? ,这样就允许字符串为 null 值了。
执行下面的代码,调用 getName()

    val name:String = getName()?:return
    println(name.length)

根据 genName() 返回值,最终打印返回值的长度或无输出。
如果确定代码不会为 null 值,可以使用 !! 来告诉编译器,这里不会为 null,从而让编译运行下去。

    val string:String? = "Joel"
    println(string!!.length)

当然,也可以把 !! 替换成 ?,这样也只会在不为 null 的时候输出 string 的长度。
而 kotlin 其实更加智能,它可以推断。

    val string:String? = "Joel"
    if(string != null)
    println(string.length)

当这里在输出前,已经通过判断 string 不为 null 了,后面的输出就直接给结果就可以了。
这样真的很智能。赞一个!

类型安全

类在进行强制转换的时候,有可能失败。kotlin可以不抛出异常,而使用 null 来给出结果。
比如一个父子类

open class Parent(){
    val name:String? = "joel"
}
class Child():Parent(){

}

    val parent:Parent = Parent()
    val child:Child? = parent as? Child
    println(child)
    println(child?.name)

在 child 允许 null,parent 强制转换 Child,如果失败就把 null 赋值给 child。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容