软件编程
位置:首页>> 软件编程>> Android编程>> Kotlin空安全空类型浅谈

Kotlin空安全空类型浅谈

作者:听着music睡  发布时间:2022-06-18 22:48:49 

标签:Kotlin,空安全,空类型

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

// 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来代替

来源:https://cloud.tencent.com/developer/article/1928312

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com