Kotlin 的空安全特性主要用于避免在编译时期出现空指针异常(NullPointerException)。以下是一些 Kotlin 空安全处理的常见用途:
非空类型:使用 non-null
类型注解,可以确保变量或返回值不会为 null。例如:
val name: String = "Alice" // 非空类型
可空类型:使用 nullable
类型注解,可以表示变量或返回值可能为 null。例如:
val age: Int? = null // 可空类型
安全调用操作符:使用 ?.
操作符,可以在调用可空对象的成员时避免空指针异常。例如:
val name = user?.name // 如果 user 为 null,则 name 被赋值为 null
空合并操作符:使用 ?:
操作符,可以在可空表达式中进行安全的空值判断。例如:
val displayName = user?.name ?: "Unknown" // 如果 user 为 null,则 displayName 被赋值为 "Unknown"
Elvis 操作符:与空合并操作符类似,但只适用于两个可空表达式。例如:
val displayName = user?.name ?: "Unknown"
val age = user?.age ?: 0 // 如果 user 为 null,则 age 被赋值为 0
非空断言操作符:使用 !!
操作符,可以强制将可空类型转换为非空类型,但可能会导致空指针异常。例如:
val name = user!!.name // 如果 user 为 null,则抛出 NullPointerException
空值检查:使用 isNull()
和 isNotNull()
函数,可以检查可空对象是否为 null。例如:
if (user != null) {
println(user.name)
} else {
println("User is null")
}
扩展属性:可以为可空类型和非空类型定义扩展属性,以便在访问属性时进行空安全处理。例如:
extension String? {
val isEmpty: Boolean
get() = this == null || this.trim().isEmpty()
}
val name: String? = "Alice"
println(name.isEmpty()) // 输出 true
通过这些空安全特性,Kotlin 可以在编译时期捕获许多潜在的空指针异常,从而提高代码的健壮性和可读性。