前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Kotlin】空安全 ② ( 手动空安全管理 | 空安全调用操作符 ? | let 函数结合空安全调用操作符使用 )

【Kotlin】空安全 ② ( 手动空安全管理 | 空安全调用操作符 ? | let 函数结合空安全调用操作符使用 )

作者头像
韩曙亮
发布2023-03-30 18:40:28
6010
发布2023-03-30 18:40:28
举报
文章被收录于专栏:韩曙亮的移动开发专栏
在这里插入图片描述
在这里插入图片描述

文章目录

一、手动空安全管理


Kotlin 语言中 , 变量类型 分为 可空类型 和 非空类型 ,

默认状态 下 , 变量是 非空类型 的 ,

如果使用 类型? 将变量声明为 可空类型 ,

那么就需要使用 手动安全管理 ;

代码示例 : 在下面的代码中 , 将 name 变量声明为了 String? 可空类型 ,

那么 调用该可空类型变量 的 成员 或 方法 时 , 就不能直接调用了 ,

必须引入 手动安全管理 ;

代码语言:javascript
复制
fun main() {
    var name: String? = "Tom"
    name.count()
}

上述代码中 , 在调用该变量时 , 就会出现如下报错信息 :

代码语言:javascript
复制
Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
在这里插入图片描述
在这里插入图片描述

二、空安全调用操作符 ?


在 Kotlin 语言中 , 调用 可空类型变量 的 成员 时 ,

可以使用 " 安全调用操作符 " 也就是 ? 进行调用 ,

使用格式如下 :

代码语言:javascript
复制
可空类型变量?.成员

使用了 安全调用操作符 之后 , 在调用变量成员前 , 会自动进行 空值检查 ,

如果该变量为空 , 则会 跳过后面的 成员调用 , 继续执行下一行代码 ;

代码示例 : 在下面的代码中 , 调用 name 变量时 , 使用 ? 安全调用操作符 name?.count() 进行调用 ;

代码语言:javascript
复制
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 值为返回值 ;

代码语言:javascript
复制
fun main() {
    var name: String? = "tom"
    name = name?.let {
        // let 函数返回 匿名函数 最后一行
        if(it.isNotBlank()) {
            // 如果字符串非空白, 将其转为首字母大写
            it.capitalize()
        } else {
            // 如果字符串为空白, 设置默认值
            "Hello"
        }
    }
    println(name)
}

执行结果 :

代码语言:javascript
复制
Tom
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、手动空安全管理
  • 二、空安全调用操作符 ?
  • 三、let 函数结合空安全调用操作符使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档