美文网首页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