前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈Kotlin(八):空安全、空类型

浅谈Kotlin(八):空安全、空类型

作者头像
听着music睡
发布2022-01-04 10:36:12
9400
发布2022-01-04 10:36:12
举报
文章被收录于专栏:Android干货

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

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

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

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

1、

代码语言:javascript
复制
        var name : String ?= ""
        if (name == null){
            Log.i(Tag,"name==null")
        }else{
            Log.i(Tag, "name!=null")
        }

2、

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

代码语言:javascript
复制
        var name : String ?= "abc"
        Log.i(Tag,"name="+name?.length)

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

代码语言:javascript
复制
var name:String?="abc"

fun getNameLength():String?{
      return name
}

三、let操作符

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

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

常规写法:

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

用let操作符写法:

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

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

1、?:

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

代码语言:javascript
复制
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的时候抛出空指针异常

代码语言:javascript
复制
var name:String?=null
nameLength = name!!.length

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

3、as、as?

类型转换

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

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

代码语言:javascript
复制
var name:String?= 12 as String

可见12 转换String 类型异常

当使用as?的时候

代码语言:javascript
复制
var name:String?= 12 as? String
Log.i(Tag,"name="+ name)
// 打印日志: name=null

总结:

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档