Kotlin 极简小抄 P7- 空安全(安全调用操作符、Elvis 操作符、非空断言操作符、let 函数)

ops/2025/1/20 1:09:34/

Kotlin 概述

  1. Kotlin 由 JetBrains 开发,是一种在 JVM(Java 虚拟机)上运行的静态类型编程语言

  2. Kotlin 旨在提高开发者的编码效率和安全性,同时保持与 Java 的高度互操作性

  3. Kotlin 是 Android 应用开发的首选语言,也可以与 Java 一样用于服务器端开发


一、安全调用操作符 ?.

1、基本介绍
  • 安全调用操作符 ?. 可以安全地调用可能为 null 的对象的方法或访问其属性,而不触发空指针异常
2、演示
kotlin">// 定义一个可能为 null 的字符串变量
var personName: String? = "Tom"// 使用安全调用操作符访问字符串的长度属性
val length: Int? = personName?.lengthprintln(length)
# 输出结果3
kotlin">// 定义一个可能为 null 的字符串变量
var personName: String? = null// 使用安全调用操作符访问字符串的长度属性
val length: Int? = personName?.lengthprintln(length)
# 输出结果null

二、Elvis 操作符 ?:

1、基本介绍
  • Elvis 操作符 ?: 可以简洁地处理空值,它可以为可能为 null 的表达式提供一个默认值
  1. 如果表达式的结果不是 null,则返回该结果

  2. 如果表达式的结果是 null,则返回指定的默认值

2、演示
kotlin">// 定义一个可能为 null 的字符串变量
var userInput: String? = null// 使用 Elvis 操作符为可能为 null 的字符串提供一个默认值
val result: String = userInput ?: "No input"println(result)
# 输出结果No input
kotlin">// 定义一个可能为 null 的字符串变量
var userInput: String? = "Hello World"// 使用 Elvis 操作符为可能为 null 的字符串提供一个默认值
val result: String = userInput ?: "No input"println(result)
# 输出结果Hello World

三、非空断言操作符 !!

1、基本介绍
  1. 非空断言操作符 !! 用于告诉编译器某个可空类型的变量在当前的上下文中一定不为 null

  2. 使用这个操作符可以绕过 Kotlin 的空安全机制

  3. 但如果使用它在一个实际上是 null 的变量上,程序将会抛出 KotlinNullPointerException 异常

2、演示
  1. 非空断言操作符 !! 用于变量
kotlin">var name: String? = "Tom"println(name!!.length)
# 输出结果3
kotlin">var name: String? = nullprintln(name!!.length)
# 输出结果Exception in thread "main" java.lang.NullPointerException
  1. 非空断言操作符 !! 用于函数返回值
kotlin">fun getString(): String? {return "Hello World"
}
kotlin">var str = getString()!!println(str)
# 输出结果Hello World

四、let 函数

1、基本介绍
  1. let 函数主要用于处理可空类型的值

  2. 当有一个可能为 null 的对象,想要在这个对象非 null 的情况下执行一些操作,但又不希望增加额外的空检查代码时,可以使用let 函数

2、演示
kotlin">var str: String? = "Hello, Kotlin!"// 使用 let 函数处理非 null 值
str?.let {// 在这里,it 就是 str 的非 null 值println(it.length)
}println("结束")
# 输出结果14
结束
kotlin">var str: String? = null// 使用 let 函数处理非 null 值
str?.let {// 在这里,it 就是 str 的非 null 值println(it.length)
}println("结束")
# 输出结果结束
kotlin">var str: String? = "Hello, Kotlin!"// 使用 let 函数处理非 null 值,并使用自定义的参数名
str?.let { value ->// 在这里,value 就是 str 的非 null 值println(value.length)
}println("结束")
# 输出结果14
结束

http://www.ppmy.cn/ops/151523.html

相关文章

设计模式-结构型-装饰器模式

装饰器模式(Decorator Pattern)是结构型设计模式中的一种,它允许你通过将对象封装在一个新的对象中,来动态地添加新的功能,而无需改变原对象的结构。装饰器模式的核心思想是“将功能附加到对象上”,它是一种…

PostgreSQL和MySQL有什么区别?

一、数据存储与管理方面 数据类型支持 PostgreSQL: 提供了非常丰富的数据类型。除了基本的整数、浮点数、字符、日期等类型外,对复杂数据类型的支持很出色。例如,它原生支持数组(Array)类型,可以方便地存储…

前端实习第二个月小结

时间飞快,第一次实习已经过去两个多月,作一些简单的总结和分享。 注:文章整体会比较轻松,提及的经历、经验仅作参考。 一、关于实习/工作内容 1、工作内容 近期做的是管理后台方面的业务,技术栈:前端re…

归并排序算法

归并排序 1算法介绍 和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用…

自动化之Ansible

一、Ansible介绍 Ansible是一个同时管理多个远程主机的软件(任何可以通过SSH协议登录的机器),因此Ansible可以管理 运程虚拟机、物理机,也可以是本地主机(linux、windows)。 Ansible通过SSH协议实现 管理节点、远程节点的通信。 只要是能够SSH登录的主机…

一个超快低延迟.Net网络通信库:支持TCP, SSL, UDP, HTTP,HTTPS, WebSocket多协议

今天给大家推荐一个性能好、低延迟.Net网络通信库,基本支持所有协议。 01 项目简介 NetCoreServer是一个基于.NET Core的开源项目,一个高性能、跨平台的异步套接字服务器与客户端库。该项目支持多种传输协议,包括TCP、SSL、UDP、HTTP、HTTP…

docker与部署微服务实战

2013年发布至今, Docker 一直广受瞩目,被认为可能会改变软件行业。 但是,许多人并不清楚 Docker 到底是什么,要解决什么问题,好处又在哪里?今天就来详细解释,帮助大家理解它,还带有…

Spring MVC拦截器完成用户登录权限验证的示例

【图书介绍】《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》_【新华文轩】springspring mvcmybatis从零开始学(视频教学版) 第3版 正版-CSDN博客 《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版…