6:kotlin 空值安全(Null safety)

在Kotlin中,是可以有空值的。为了防止程序中出现空值问题,Kotlin实施了空值安全。空值安全在编译时而不是运行时检测到可能的空值问题。

空值安全是一组功能的组合,允许您:

  • 明确声明程序中允许空值的地方。
  • 检查空值。
  • 对可能包含空值的属性或函数进行安全调用。
  • 如果检测到空值,声明要采取的行动。

空值类型(Nullable types)

kotlin中,默认属性不支持空值,如果想要支持空值,需要在属性定义时使用?显示的设置

fun main() {var neverNull: String = "This can't be null"
//    neverNull = null    // 编译报错 - Null can not be a value of a non-null type Stringvar nullable: String? = "You can keep a null here"nullable = null
}

空值检测(Check for null values)

fun describeString(maybeString: String?): String {if (maybeString != null && maybeString.length > 0) {return "字符串长度 ${maybeString.length}"} else {return "空值或者null"}
}fun main() {var nullString: String? = nullprintln(describeString(nullString)) // 空值或者null
}

实际情况下可能还要检测字符串是否是多个空格组成的

安全调用(Use safe calls)

如果想避免代码中出现空值引发错误,可以使用安全调用运算符?.。如果对象的属性为空,安全调用运算符将返回空

fun lengthString(maybeString: String?): Int? = maybeString?.lengthfun main() { var nullString: String? = nullprintln(lengthString(nullString))  // null
}

安全调用可以采用链式编程 a?.b?.c

安全调用同样支持类方法

默认值(Use Elvis operator)

可以使用?:运算符在检测到空值时提供一个默认值

fun main() {var nullString: String? = nullprintln(nullString?.length ?: 9)  // 9
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/163254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何避免Steam搬砖项目中账号被盗

购买steam余额有风险吗?及N种被红锁的情况 相信最近很多人都已经听说过steam游戏搬砖这个项目,也叫CSGO游戏搬砖项目,还有人叫它:国外steam游戏汇率差项目,无论怎么称呼,都是同一个项目。 那么什么是stea…

2022-4-10 台大机器人学 轨迹

台大机器人学 运动学 轨迹规划 多段 linear function with parabolic blends 直线转二次曲线平滑过多个中间via points

Fuzzy c-means

Fuzzy c-means ​ 模糊C-均值聚类算法:是一种模糊聚类算法,是K均值算法聚类的推广形式,隶属度取值为[0,1]区间内的任意一个数,提出的基本依据是“类内加权误差平方和最小化”准则。 ​ 这两个方法都是迭代求取最终的聚类划分&am…

泼天的富贵来啦,快带着你的PMP证书一起迎接

考过PMP认证的威宝们,这波泼天的富贵大家一定要接住呀! 很多威宝们在学习PMP之前都在担心,这个证书含金量高吗?转岗跳槽用得上吗?有必要考吗?今天,喜番大声地告诉大家:含金量高&…

Class文件转Java文件

目录 1、下载一个反编译工具2、在文件夹下打开命令窗口3、在此目录下随意建一个文件夹4、在打开的命令窗口输入命令5、返回解压目录下 1、下载一个反编译工具 下载链接:https://varaneckas.com/jad/ 下载的是第一个 下载后放至任意目录下解压即可 2、在文件夹下打…

夜天之书 #88 Elastic License 2.0 与开源协议的发展

译序 我在此前的多篇文章中讨论了商业开源的话题: 《企业开源的软件协议模型实践》《企业实践开源的动机》《商业源码协议为何得到 HashiCorp 等企业的垂青?》《企业如何实践开源协同》《中国不缺好的开源开发者》“商业探索与可持续”一节《开源不是商业…

JetLinks设备接入的认识与理解【woodwhales.cn】

为了更好的阅读体验,建议移步至笔者的博客阅读:JetLinks设备接入的认识与理解 1、认识 JetLinks 1.1、官网文档 官网:https://www.jetlinks.cn/ JetLinks 有两个产品:JetLinks-lot和JetLinks-view 官方文档: JetLi…

【自然语言处理】正向最大匹配算法(FMM),反向最大匹配算法(BMM)和双向最大匹配算法(BM)原理及实现

目录 一,正向最大匹配算法(FMM) 二,反向最大匹配算法(RMM) 一,正向最大匹配算法(FMM) 正向最大匹配分词(Forward maximum matching segmentation)通常简称为…

没有PDF密码,如何解密?

PDF文件有两种密码,一个打开密码、一个限制编辑密码,因为PDF文件设置了密码,那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密? PDF和office一样,可以对文件进行加密,但是没有提供恢复密码的功…

powshell 不能运行脚本

1、先执行: Set-ExecutionPolicy -Scope CurrentUser 2、再输入: remotesigned

win10下安装gcc

win10下安装gcc 一、gcc是什么? 1.1、安装gcc 第一次安装,记录一下 一、gcc是什么? GNU编译器套件(GNU Compiler Collection)包括C、C、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc、libgcj等等…

mac电脑文件比较工具 UltraCompare 中文for mac

UltraCompare是一款功能强大的文件和文件夹比较工具,用于比较和合并文本、二进制和文件夹。它提供了丰富的功能和直观的界面,使用户能够轻松地比较和同步文件内容,查找差异并进行合并操作。 以下是UltraCompare软件的一些主要特点和功能&…

为什么程序员不直接用线上环境写代码呢?

为什么程序员不直接用线上环境写代码呢? 有的,我就是直接用Linux作为主力电脑使用,大概从201 6年起,我就开始这样干了。无论是编 程、画电路板、画UI、剪视频.... 都在Linux上面完成。 编程工具大部分都有Linux版本,…

【【Linux 常用命令学习 之 一 】】

Linux 常用命令学习 之 一 打开终端之后的 我们会了解 所使用的 字符串含义 其中前面的 zhuxushuai 是 当前的用户名字 接下来的 zhuxushuai-virtual-machine 是 机器名字 最后的符号 $表示 当前是普通用户 输入指令 ls 是打印出当前所在目录中所有文件和文件夹 shell 操…

使用css代码防止图片被拖拽的教程

在网页中,我们经常使用图片来美化页面或辅助内容呈现,但有时用户会无意中拖拽图片,这会对页面布局或其他元素产生意想不到的影响。为了防止这种情况,我们可以使用CSS来禁止图片被拖拽。 img {-webkit-user-drag: none;-moz-user-d…

CF 1891A 学习笔记

原题 A. Sorting with Twos time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You are given an array of integers 𝑎1,𝑎2,…,𝑎𝑛�1,&a…

多个视频怎么生成一个二维码?二维码看视频的制作方法

二维码能放入多个视频吗?现在用二维码看视频是很流行的一种方式,不仅符合现在人的行为习惯,而且还不需要占用自身的容量空间,能够即时的获取视频内容。那么当有多个视频需要展示,但是想要放到一个二维码中,…

集团投融资大数据平台解决方案

一、项目背景 项目为集团型公司大数据平台项目,整个项目周期约为6个月,整体呈现了对外的数据大屏驾驶仓和对内的看板报表,减少了客户内部数据上报和报表制作的重复工作量,为集团数据决策奠定基础。 二、项目目标 战略层&#xff…

局部保持投影(Locality preserving projections,LPP)

局部保持投影(Locality preserving projections,LPP) 方法概述 核心思想 有映射 Y m ∗ n f ( X d ∗ n ) \underset{m*n}{Y}f(\underset {d*n}X) m∗nY​f(d∗nX​),能够实现将d维的样本变换到m维空间之中 假设:对…

ESP32 Arduino实战传感器篇-- DHT11 DHT22 使用 Web 服务器显示值

该项目采用 ESP32 作为控制设备,连接到现有的 WiFi 网络并创建 Web 服务器。当设备连接到该 Web 服务器时,ESP32 将从 DHT11/DHT22 传感器读取温度和相对湿度,并将其发送到设备的 Web 浏览器,并具有良好的界面。兴奋的?让我们开始吧! ESP32 内置了温度传感器,为什么不使…