美文网首页
Kotlin中变量、常量以及空安全

Kotlin中变量、常量以及空安全

作者: yumodev | 来源:发表于2017-11-25 02:22 被阅读0次

    Kotlin的可空类型

    在以往的Java开发中有一个著名的异常NullPointerException,俗称NPE,它由访问为空的属性引发,为此Kotlin中引入了可空类型,旨在有效消除NPE异常的发生。

    在定义变量的时候在其类型的后面加上一个?问号表示该变量是可空类型,可以赋予其null值。比如

    //定义可空变量,并赋予null值
    var a: String?
    a = null
        
    //定义一个非空变量,赋予null值的发生错误
    var b: String
    b = null // Null can not be a value of a non-null type String
    

    可空类型的特点

    • 可空类型变量可以存放null值。
    • 可空类型变量不能赋值为不可空变量,包括非空类型的形参
    • 不能直接调用可空类型的方法和属性

    安全调用可空类型: ?.

    创建一个var a: String? = "abc"创建了一个可空的字符串类型变量a
    那么调用变量a的方法前需要判断其是否为null,比如使用if..else判断
    println(if(a != null) a.toUpperCase() else a)

    在Kotlin中提供了一个非常方便的语法糖,可以将上面的if..else语句,使用?.
    比如println(a?.toUpperCase())

    Elvis运算符:?:

    看一个Elvis运算符的例子:

    //定义一个字符串变量a,如果不为空输出其值,如果为空输出“aa”
    var a: String? = "a"
    val b = "aa"
    println(a?:b) //输出为a
    a = null
    println(a?:b) //输出为aa
    

    通过上面的例子可以看出Elvis运算符的函数就是当变量a不为空,表达式的值就是a,如果为空表达式的值就是b

    非空断言:!! 操作符

    可空类型的变量不能直接调用,一般要么进行if..else判断,要么使用?.操作符进行安全调用,除此以外
    Kotlin中提供了!!操作符,将一切可空的值转换为不可空的值,从而直接调用变量的方法和属性,
    如果可控变量的值为null,将发生NPE异常。

    参考

    相关文章

      网友评论

          本文标题:Kotlin中变量、常量以及空安全

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