在 Kotlin 中实现空值检查
一些原始类型不接受 null
并抛出错误。null
引用产生的错误可能导致应用程序失败,甚至导致系统崩溃;因此,在运行程序之前检查 null
引用至关重要。
Kotlin 允许我们以各种方式检查 null
。本文将教你如何在 Kotlin 中检查 null
并防止出现 NullPointerException
错误。
在 Kotlin 中使用条件语句实现 Null
检查
在 Kotlin 中检查 null
的最简单方法是使用条件语句。在这里,我们可以使用条件运算符 ==
或!=
并相应地执行条件语句。
我们也可以使用 ===
代替 ==
和!==
代替!=
。结构等式 x == null
无论如何都被翻译成指称等式 x === null
;因此,使用 ==
还是 ===
并没有太大区别。
这是一个示例,展示了在 Kotlin 中使用条件语句进行 null
检查。
fun main() {
val x: String? = "Android"
if (x != null && x.length > 0) {
print("This is not null, its length is: ${x.length}")
} else {
print("This is a null string!")
}
}
输出:
现在,如果我们将值更改为 null
,它将给出另一个输出。
fun main() {
val x: String? = null
if (x != null && x.length > 0) {
print("This is not null, its length is: ${x.length}")
} else {
print("This is a null string!")
}
}
输出:
仅当使用 val
关键字声明变量时,条件语句才有效。val
关键字使单词不可变。
如果我们使用 var
变量,则在检查 null
引用后变量的值可能会发生变化。
在 Kotlin 中使用安全调用实现 Null
检查
安全调用是访问 Kotlin 中 null
检查的可空属性的另一个选项。我们可以使用安全呼叫运算符 ?.
检查表达式的结果。
根据表达式结果,我们可以执行进一步的语句。
这是一个例子。
fun main() {
val v = "Android"
val x: String? = null
println(v?.length)
println(x?.length)
}
输出:
安全调用在创建链时特别有用。例如,我们可以写:
a?.b?.c?.d
在上面的例子中,如果 a
不是 null
,它将移动到 b
。如果 b
不是 null
,它将移动到 c
,如果 c
不是 null
,它将移动到 d
。
每当编译器发现一个 null
值时,它就会停止执行并返回 null
。
使用带有 let
函数的安全调用来处理 Kotlin 中的 Null
通常,如果列表的值之一是 null
,编译器会返回 null
。但是,我们可以将 let
函数与安全调用结合起来,以仅对列表的非 null
值起作用。
例子:
fun main() {
val myList: List<String?> = listOf("David", "Virat", "Steve", null)
for (i in myList) {
i?.let { println(it) } // prints only non-null values
}
}
输出:
使用 Elvis 运算符在 Kotlin 中实现 Null
检查
Kotlin null
检查的另一个绝佳选择是使用 Elvis 运算符 ?:
。如果在引用中找到 null
值,它将返回非 null
或默认值。
有两个表达式:在 Elvis 运算符的左侧和右侧。如果左侧表达式的值不为 null
,则运算符返回该值,但如果左侧表达式为 null
,则 Elvis 运算符返回右侧表达式的值。
这里的关键是 Elvis 运算符仅在左侧表达式为 null
时才会执行右侧的表达式。
例子:
fun main(args: Array<String>) {
val i: String? = null
val j: String = i ?: "Welcome! This is Kotlin Programming."
// This print statement uses the Elvis operator
println(i ?: j)
}
输出:
相关文章
在 Java 中获取文件大小
发布时间:2023/05/01 浏览次数:139 分类:Java
-
Java 提供了不同的方法来获取文件的字节大小。 本教程演示了在 Java 中获取文件大小的不同方法。使用 Java IO 的文件类获取文件大小 Java IO 包的 File 类提供了以字节为单位获取文件大小的功能。
Java 中的文件分隔符
发布时间:2023/05/01 浏览次数:108 分类:Java
-
本篇文章介绍了 Java 中的文件分隔符。Java 中的文件分隔符 文件分隔符是用来分隔目录的字符; 例如,Unix 使用 /,Windows 使用 \ 作为文件分隔符。
Java 中的文件过滤器
发布时间:2023/05/01 浏览次数:193 分类:Java
-
本篇文章介绍如何在 Java 中使用 FileFilter。FileFilter 用于过滤具有特定扩展名的文件。 Java内置包IO和Apache Commons IO为FileFilter提供了类和接口来进行文件过滤操作。
Java 获取 ISO 8601 格式的当前时间戳
发布时间:2023/05/01 浏览次数:132 分类:Java
-
本篇文章介绍了 ISO 8601 日期格式、其重要性及其在 Java 中的使用。 它还列出了一些优点来强调为什么应该使用 ISO 格式来表示日期。
在 Java 中获取数组的子集
发布时间:2023/05/01 浏览次数:142 分类:Java
-
本篇文章介绍了几种在 Java 中获取数组子集的方法。使用 Arrays.copyOf() 方法获取数组的子集 使用 Arrays.copyOfRange() 方法获取数组的子集
用 Java 填充二维数组
发布时间:2023/05/01 浏览次数:110 分类:Java
-
二维数组是基于表结构的,即行和列,填充二维数组不能通过简单的添加到数组操作来完成。 本篇文章介绍如何在 Java 中填充二维数组。
计算 Java 数组中的重复元素
发布时间:2023/05/01 浏览次数:202 分类:Java
-
本篇文章介绍Java计算数组中重复元素的方法。计算 Java 数组中的重复元素。我们可以创建一个程序来计算数组中的重复元素。 该数组可以是未排序的,也可以是已排序的。
Java 中 List 和 Arraylist 的区别
发布时间:2023/05/01 浏览次数:90 分类:Java
-
表示为单个单元的一组单个对象称为集合。 在 Java 中,Collection 是一个具有多个已定义接口和类的框架,用于将一组对象表示为一个单元。 它允许我们操纵