目录
  • 正文
    • 一、判断可空变量是否为null的方式
    • 二、涉及到返回可空值的函数使用方法,在返回类型后同时加?
    • 三、let操作符
    • 四、Evils操作符(?: !! as)
  • 总结:

    正文

    首先非空变量和可空变量的区别:

    // name为不可为空的变量, 不能赋值为null ,若有判断 if(name==null) 无意义,因为肯定不为null
    var name : String = ""
    // role 为可空变量
    var role : String? = ""

    非空变量赋值为Null为报如下错误:

    Kotlin空安全空类型浅谈

    一、判断可空变量是否为null的方式

    1、

            var name : String ?= ""
            if (name == null){
                Log.i(Tag,"name==null")
            }else{
                Log.i(Tag, "name!=null")
            }

    2、

    ?.的意思为若name为null 。则返回null

            var name : String ?= "abc"
            Log.i(Tag,"name="+name?.length)

    二、涉及到返回可空值的函数使用方法,在返回类型后同时加?

    var name:String?="abc"
    
    fun getNameLength():String?{
          return name
    }

    三、let操作符

    用法:变量?.let{ … } , 作用为忽略null的情况

    例如筛选出一个集合非空的元素集合

    常规写法:

        fun logUnNullList(arr:Array<String>):Unit{
            for (item in arr){
                if (arr==null){
                    continue
                }else{
                    Log.i(Tag,"非空元素为->"+item)
                }
            }
        }

    用let操作符写法:

        fun logUnNullList(arr:Array<String>):Unit{
            for (item in arr){
                item?.let {Log.i(Tag,"非空元素为->"+item)  }
            }
        }

    四、Evils操作符(?: !! as)

    1、?:

    对于一个可空变量的使用,若当该变量为空的时候赋予一个特定值使用

    var name:String?="abc"
    var nameLength:Int = 0
    nameLength = name?.length?:-1  // 取name的length ,若name为null,则nameLength的值为-1

    这样要比传统写法 if(name==null) -1 else name.length 要简介

    2、!!

    在一个可空变量使用的时候后面加上!! ,则当该变量为null的时候抛出空指针异常

    var name:String?=null
    nameLength = name!!.length

    此时name为null ,因为使用了!! ,则抛出空指针异常

    Kotlin空安全空类型浅谈

    3、as、as?

    类型转换

    当使用as的时候若类型转换失败则抛出类型转换(ClassCastException)异常

    当使用as?的时候若类型转换失败则返回null,不会抛出异常

    var name:String?= 12 as String

    可见12 转换String 类型异常

    Kotlin空安全空类型浅谈

    当使用as?的时候

    var name:String?= 12 as? String
    Log.i(Tag,"name="+ name)
    // 打印日志: name=null

    总结:

    抛出异常的 !! as 尽量少用,用as? ?. ?: let来代替

    以上就是Kotlin空安全空类型浅谈的详细内容,更多关于Kotlin空安全空类型的资料请关注其它相关文章!

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。