Kotlin空安全空类型浅谈
短信预约 -IT技能 免费直播动态提醒
正文
首先非空变量和可空变量的区别:
// 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空安全空类型的资料请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341