非空断言
本课属于 Coddy Kotlin 学习旅程的“基础知识”单元。第 17 课,共 93 课。
安全调用运算符和 Elvis 运算符可以妥善处理空值,但有时你会非常确定,在代码的某个位置,可空值一定不是 null。非空断言运算符 !! 可以让你告诉 Kotlin:“我保证这里不是 null。”
fun main() {
val name: String? = "Alice"
val length = name!!.length // 将 String? 转换为 String
println(length) // 输出:5
}!! 运算符会将可空类型转换为对应的非空类型。不过,如果值实际上为 null,你的程序就会因 NullPointerException 而崩溃:
fun main() {
val name: String? = null
val length = name!!.length // 程序在这里崩溃!
}使用时机:只有在逻辑能保证值不为 null,但编译器无法验证时,才使用 !!。大多数情况下,优先使用安全调用 ?. 或 Elvis 运算符 ?:。非空断言应该是你的最后选择,而不是首选。
挑战
简单编写一个函数 getUppercaseLength,它接收一个 text 参数,并返回其大写版本的长度。
该函数接收一个非空字符串值,但参数类型是可空的(String?)。使用非空断言运算符 !! 将其转换为非空类型,然后链式调用 uppercase() 方法并获取 length。
参数:
text(String?):一个可空字符串,保证包含一个值
返回值:文本大写版本的长度(Int)
注意:在这个挑战中,输入始终是有效字符串,不会是
null。这模拟了一种场景:你知道值存在,但编译器无法验证这一点。
亲手试试
fun getUppercaseLength(text: String?): Int {
// 在这里编写代码
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Kotlin 在线编辑器