美文网首页kotlin
12. Null安全

12. Null安全

作者: 厚土火焱 | 来源:发表于2017-11-12 23:13 被阅读93次

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。

相关文章

网友评论

    本文标题:12. Null安全

    本文链接:https://www.haomeiwen.com/subject/hgbomxtx.html