Kotlin空安全 ② ( 手动空安全管理 | 空安全调用操作符 ? | let 函数结合空安全调用操作符使用 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin空安全 ② ( 手动空安全管理 | 空安全调用操作符 ? | let 函数结合空安全调用操作符使用 )相关的知识,希望对你有一定的参考价值。
文章目录
一、手动空安全管理
Kotlin 语言中 , 变量类型 分为 可空类型 和 非空类型 ,
默认状态 下 , 变量是 非空类型 的 ,
如果使用 类型?
将变量声明为 可空类型 ,
那么就需要使用 手动安全管理 ;
代码示例 : 在下面的代码中 , 将 name
变量声明为了 String?
可空类型 ,
那么 调用该可空类型变量 的 成员 或 方法 时 , 就不能直接调用了 ,
必须引入 手动安全管理 ;
fun main()
var name: String? = "Tom"
name.count()
上述代码中 , 在调用该变量时 , 就会出现如下报错信息 :
Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
二、空安全调用操作符 ?
在 Kotlin 语言中 , 调用 可空类型变量 的 成员 时 ,
可以使用 " 安全调用操作符 " 也就是 ?
进行调用 ,
使用格式如下 :
可空类型变量?.成员
使用了 安全调用操作符 之后 , 在调用变量成员前 , 会自动进行 空值检查 ,
如果该变量为空 , 则会 跳过后面的 成员调用 , 继续执行下一行代码 ;
代码示例 : 在下面的代码中 , 调用 name
变量时 , 使用 ?
安全调用操作符 name?.count()
进行调用 ;
fun main()
var name: String? = "Tom"
name?.count()
三、let 函数结合空安全调用操作符使用
如果想要在 变量 原有基础上 , 继续执行其它操作 , 可以使用 let
标准函数 ;
安全调用操作符 经常与 let
标准函数 一起使用 ;
如 : 以 name?.let
方式调用 let
函数 ,
其含义是 如果 name
变量不为空 , 则调用 let
函数 ,
如果 name
变量为空 , 则跳过后面的 let
函数执行 ;
代码示例 : 在下面的代码中 ,
将变量 name
声明为了 可空类型 String?
,
为 name
变量执行一些 附加操作 时 , 可使用 ?.let
方式进行 ,
含义是 , 假如 name
变量不为空 , 则执行 let
函数中的 Lambda 表达式内容 ,
let 函数 返回 匿名函数 最后一行 ,
该 Lambda 表达式 / 匿名函数 / 闭包 的含义是 ,
如果 name
变量 字符串非空白, 将其转为首字母大写 , 并返回 ,
如果 name
变量 字符串为空白, 设置 Hello
值为返回值 ;
fun main()
var name: String? = "tom"
name = name?.let
// let 函数返回 匿名函数 最后一行
if(it.isNotBlank())
// 如果字符串非空白, 将其转为首字母大写
it.capitalize()
else
// 如果字符串为空白, 设置默认值
"Hello"
println(name)
执行结果 :
Tom
以上是关于Kotlin空安全 ② ( 手动空安全管理 | 空安全调用操作符 ? | let 函数结合空安全调用操作符使用 )的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin空安全总结 ( 变量可空性 | 手动空安全管理 | 空安全调用操作符 | 非空断言操作符 | 空合并操作符 | 空指针异常处理 | 先决条件函数判空 )
Kotlin空安全 ④ ( 手动空安全管理 | 空合并操作符 ?: | 空合并操作符与 let 函数结合使用 )
Kotlin空安全 ① ( Kotlin 的空安全机制 | 变量可空性 | 默认变量不可赋空值 | 声明可空类型变量 )