当前位置 : 主页 > 手机开发 > android >

Kotlin空安全空类型浅谈

来源:互联网 收集:自由互联 发布时间:2023-02-01
目录 正文 一、判断可空变量是否为null的方式 二、涉及到返回可空值的函数使用方法,在返回类型后同时加? 三、let操作符 四、Evils操作符(?: !! as) 总结: 正文 首先非空变量和可空
目录
  • 正文
    • 一、判断可空变量是否为null的方式
    • 二、涉及到返回可空值的函数使用方法,在返回类型后同时加?
    • 三、let操作符
    • 四、Evils操作符(?: !! as)
  • 总结:

    正文

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

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

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

    一、判断可空变量是否为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 ,因为使用了!! ,则抛出空指针异常

    3、as、as?

    类型转换

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

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

    var name:String?= 12 as String

    可见12 转换String 类型异常

    当使用as?的时候

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

    总结:

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

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

    网友评论