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

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

作者头像
韩曙亮
发布于 2023-03-30 10:40:28
发布于 2023-03-30 10:40:28
68100
代码可运行
举报
运行总次数:0
代码可运行

文章目录

一、手动空安全管理


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

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

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

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

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

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

必须引入 手动安全管理 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fun main() {
    var name: String? = "Tom"
    name.count()
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?

二、空安全调用操作符 ?


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

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

使用格式如下 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
可空类型变量?.成员

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

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

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

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

执行结果 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Tom
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Kotlin】空安全总结 ( 变量可空性 | 手动空安全管理 | 空安全调用操作符 | 非空断言操作符 | 空合并操作符 | 空指针异常处理 | 先决条件函数判空 )
在 Java 语言 编写的程序中 , 出现最多的崩溃就是 NullPointerException 空指针异常 ,
韩曙亮
2023/03/30
2K0
【Kotlin】空安全总结 ( 变量可空性 | 手动空安全管理 | 空安全调用操作符 | 非空断言操作符 | 空合并操作符 | 空指针异常处理 | 先决条件函数判空 )
【Kotlin】标准库函数总结 ( apply 函数 | let 函数 | run 函数 | with 函数 | also 函数 | takeIf 函数 | takeUnless 函数 )
Kotlin 语言中 , 在 Standard.kt 源码中 , 为所有类型定义了一批标准库函数 , 所有的 Kotlin 类型都可以调用这些函数 ;
韩曙亮
2023/03/30
3.2K0
【Kotlin】标准库函数总结 ( apply 函数 | let 函数 | run 函数 | with 函数 | also 函数 | takeIf 函数 | takeUnless 函数 )
【Kotlin】空安全 ④ ( 手动空安全管理 | 空合并操作符 ?: | 空合并操作符与 let 函数结合使用 )
如果 表达式 A 的值 不为 null , 则 整个表达式的值 就是 表达式 A 的值 ;
韩曙亮
2023/03/30
9340
【Kotlin】空安全 ④ ( 手动空安全管理 | 空合并操作符 ?: | 空合并操作符与 let 函数结合使用 )
【Kotlin】字符串操作 ② ( 字符串替换函数 replace | 字符串比较操作符 == 和 === | 字符串遍历 forEach )
对应代码中的 Regex("[ol]") , 该正则表达式的含义是 单个字符 o 或者 l ;
韩曙亮
2023/03/30
1.7K0
【Kotlin】字符串操作 ② ( 字符串替换函数 replace | 字符串比较操作符 == 和 === | 字符串遍历 forEach )
【Kotlin】空安全 ③ ( 手动空安全管理 | 非空断言操作符 !! | 使用 if 语句判空 )
Kotlin 中的 可空类型 变量 , 在运行时 可以选择 不启用 安全调用 操作 ,
韩曙亮
2023/03/30
2.2K0
【Kotlin】空安全 ③ ( 手动空安全管理 | 非空断言操作符 !! | 使用 if 语句判空 )
【Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)
初学 Kotlin , 对变量机制不清楚的同学们 , 看完这篇博客基本就对变量的定义和使用有清晰的认识 ;
韩曙亮
2023/03/27
2.9K0
【Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 |  !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)
【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )
1 . 高阶函数 : 函数的 参数 或 返回值类型 是 函数类型 的 函数 , 是高阶函数 ;
韩曙亮
2023/03/27
1.3K0
From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了
Kotlin 出自于捷克一家软件研发公司 JetBrains ,这家公司开发出很多优秀的 IDE,如 IntelliJ IDEA、DataGrip 等都是它的杰作,包括 Google 官方的 Android IDE -- Android Studio ,也是 IntelliJ IDEA 的插件版。
Seachal
2023/05/20
1.4K0
From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了
【Kotlin】扩展函数总结 ★ ( 超类扩展函数 | 私有扩展函数 | 泛型扩展函数 | 扩展属性 | 定义扩展文件 | infix 关键字用法 | 重命名扩展函数 | 标准库扩展函数 )
为 现有类 定义 扩展函数 , 可以在 不修改 原有类 的情况下 增加类的功能 ;
韩曙亮
2023/03/30
3.1K0
【Kotlin】扩展函数总结 ★ ( 超类扩展函数 | 私有扩展函数 | 泛型扩展函数 | 扩展属性 | 定义扩展文件 | infix 关键字用法 | 重命名扩展函数 | 标准库扩展函数 )
【Kotlin】DSL 领域特定语言 ( apply 标准库函数分析 | 普通匿名函数 | 扩展匿名函数 | 泛型扩展匿名函数 )
核心是其 block: T.() -> Unit 参数 , 这是 泛型扩展匿名函数 ;
韩曙亮
2023/03/30
7510
【Kotlin】DSL 领域特定语言 ( apply 标准库函数分析 | 普通匿名函数 | 扩展匿名函数 | 泛型扩展匿名函数 )
【Kotlin】扩展函数 ( 扩展函数声明 | 调用方式 | 与成员函数优先级 | 接收者空值处理 )
② 扩展函数调用方式 : 父类和子类定义了相同函数签名的扩展函数 , 根据变量声明的类型调用对应的扩展函数 , 不根据变量的实际类型调用 ;
韩曙亮
2023/03/27
9150
第2章 Kotlin 语法基础第2章 Kotlin 语法基础
人与人之间通过语言来交流沟通,互相协作。人与计算机之间怎样“交流沟通”呢?答案是编程语言。一门语言有词、短语、句子、文章等,对应到编程语言中就是关键字、标识符、表达式、源代码文件等。通常一门编程语言的基本构成如下图所示
一个会写诗的程序员
2018/08/17
2.8K0
第2章 Kotlin 语法基础第2章 Kotlin 语法基础
【Kotlin】Kotlin 与 Java 互操作 ③ ( Kotlin 中处理 Java 异常 | Java 中处理 Kotlin 异常 | @Throws 注解处理异常 | 函数类型互相操作 )
在 Java 函数中 抛出 异常 , 如果 在 Java 中调用该 抛出异常 的函数 , 则 必须处理该异常 , 否则编译时就会报
韩曙亮
2023/03/30
1.3K0
【Kotlin】Kotlin 与 Java 互操作 ③ ( Kotlin 中处理 Java 异常 | Java 中处理 Kotlin 异常 | @Throws 注解处理异常 | 函数类型互相操作 )
干货 | Kotlin超棒的语言特性
作者简介 何伦,携程度假BU移动端资深研发经理,负责iOS、Android平台上跟团游产品预订流程的前端页面的研发工作。对新技术有着浓厚的兴趣。 自从2017年Google宣布Kotlin成为Android官方开发语言之后,Kotlin受到广大Android开发者的追捧。其强大的安全性,简洁性和与Java的互操作性,为开发者带来了耳目一新的开发体验,也极大提升了Android原生代码的开发效率。 不过大部分开发者对Kotlin的使用,仍然局限于把Java代码逻辑按照Kotlin语法进行转换的层面,其实Ko
携程技术
2018/07/05
1.5K0
Kotlin热身篇: 简介与基本用法
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注移动基础平台开发 ,涵盖音视频, APM和信息安全等各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!精彩内容不容错过~ 一. kotlin 简介 Kotlin 拥有强大的生态,因为 Kotlin 是一门跑在 Java 虚拟机上的函数式语言,完全符合 JVM 的设计规范,如: 类型擦除,装箱和拆箱等等。所以也可以像 Java 一样支持 Android 原生环境开发,服务端,甚至大前端方向。那么 Kotlin 和 Java 有什么共同点
小木箱
2020/11/25
1.7K0
Java和 Kotlin中的常见NPE
几乎所有对象都可以为null,意味着我在调用任何方法时,都需要小心检查对象是否为空。例如,以下代码会抛出NPE,因为 a可能为null:
Nimyears
2024/10/28
2290
第3章 Kotlin 可空类型与类型系统第3章 Kotlin 可空类型与类型系统
我们在编程语言中使用类型的目的是为了让编译器能够确定类型所关联的对象需要分配多少空间。
一个会写诗的程序员
2018/08/17
2.2K0
第3章 Kotlin 可空类型与类型系统第3章 Kotlin 可空类型与类型系统
【Kotlin】函数 ⑥ ( 函数参数为 Lambda 表达式 | Lambda 表达式作为参数的简略写法 | 唯一参数的简略写法 | 最后一个参数的简略写法 )
studentDoSomething 函数的 第三个参数为 action: (String, Int) -> String ,
韩曙亮
2023/03/30
9490
【Kotlin】函数 ⑥ ( 函数参数为 Lambda 表达式 | Lambda 表达式作为参数的简略写法 | 唯一参数的简略写法 | 最后一个参数的简略写法 )
【Kotlin】Kotlin 与 Java 互操作 ① ( 变量可空性 | Kotlin 类型映射 | Kotlin 访问私有属性 | Java 调用 Kotlin 函数 )
在 Java 语言 中 , 任何 引用类型变量 都可以为 空 null ; Java 中 八种 基本数据类型 变量 的 默认值 为 0 或 false ;
韩曙亮
2023/03/30
1.7K0
【Kotlin】Kotlin 与 Java 互操作 ① ( 变量可空性 | Kotlin 类型映射 | Kotlin 访问私有属性 | Java 调用 Kotlin 函数 )
【Kotlin】Kotlin 高阶函数 ( 高阶函数当做参数 | 高阶函数定义 | 高阶函数调用 )
Kotlin 高阶函数 : Kotlin 的高阶函数 , 就是方法的参数 或 返回值 是函数类型的 函数 ;
韩曙亮
2023/03/27
9100
推荐阅读
【Kotlin】空安全总结 ( 变量可空性 | 手动空安全管理 | 空安全调用操作符 | 非空断言操作符 | 空合并操作符 | 空指针异常处理 | 先决条件函数判空 )
2K0
【Kotlin】标准库函数总结 ( apply 函数 | let 函数 | run 函数 | with 函数 | also 函数 | takeIf 函数 | takeUnless 函数 )
3.2K0
【Kotlin】空安全 ④ ( 手动空安全管理 | 空合并操作符 ?: | 空合并操作符与 let 函数结合使用 )
9340
【Kotlin】字符串操作 ② ( 字符串替换函数 replace | 字符串比较操作符 == 和 === | 字符串遍历 forEach )
1.7K0
【Kotlin】空安全 ③ ( 手动空安全管理 | 非空断言操作符 !! | 使用 if 语句判空 )
2.2K0
【Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)
2.9K0
【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )
1.3K0
From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了
1.4K0
【Kotlin】扩展函数总结 ★ ( 超类扩展函数 | 私有扩展函数 | 泛型扩展函数 | 扩展属性 | 定义扩展文件 | infix 关键字用法 | 重命名扩展函数 | 标准库扩展函数 )
3.1K0
【Kotlin】DSL 领域特定语言 ( apply 标准库函数分析 | 普通匿名函数 | 扩展匿名函数 | 泛型扩展匿名函数 )
7510
【Kotlin】扩展函数 ( 扩展函数声明 | 调用方式 | 与成员函数优先级 | 接收者空值处理 )
9150
第2章 Kotlin 语法基础第2章 Kotlin 语法基础
2.8K0
【Kotlin】Kotlin 与 Java 互操作 ③ ( Kotlin 中处理 Java 异常 | Java 中处理 Kotlin 异常 | @Throws 注解处理异常 | 函数类型互相操作 )
1.3K0
干货 | Kotlin超棒的语言特性
1.5K0
Kotlin热身篇: 简介与基本用法
1.7K0
Java和 Kotlin中的常见NPE
2290
第3章 Kotlin 可空类型与类型系统第3章 Kotlin 可空类型与类型系统
2.2K0
【Kotlin】函数 ⑥ ( 函数参数为 Lambda 表达式 | Lambda 表达式作为参数的简略写法 | 唯一参数的简略写法 | 最后一个参数的简略写法 )
9490
【Kotlin】Kotlin 与 Java 互操作 ① ( 变量可空性 | Kotlin 类型映射 | Kotlin 访问私有属性 | Java 调用 Kotlin 函数 )
1.7K0
【Kotlin】Kotlin 高阶函数 ( 高阶函数当做参数 | 高阶函数定义 | 高阶函数调用 )
9100
相关推荐
【Kotlin】空安全总结 ( 变量可空性 | 手动空安全管理 | 空安全调用操作符 | 非空断言操作符 | 空合并操作符 | 空指针异常处理 | 先决条件函数判空 )
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档