在 Kotlin 中,有一些非空類型(Non-null types)的工具和約定可以幫助您避免空指針異常(NullPointerException)。以下是一些常用的方法和概念:
?.
操作符:這個操作符允許您在需要的地方安全地訪問可能為空的屬性或方法。如果屬性或方法為空,操作符將返回 null
,而不是拋出異常。val user: User? = getUser()
val name: String? = user?.name
!!
操作符:這個操作符用于顯式地告訴編譯器該值不會為空。如果值為空,將拋出 NullPointerException
。通常情況下,應避免使用此操作符,因為它可能導致運行時錯誤。但在某些情況下,如進行類型轉換或確保某個值不為空時,可以使用它。val name: String = user!!.name
let
函數:let
函數允許您在值不為空的情況下執行一些操作。如果值為空,let
函數將不執行任何操作。user?.let {
println("Hello, ${it.name}!")
}
fun String?.nonEmptyOrNull(): String? {
return this ?: null
}
val name: String? = "John"
val nonEmptyName: String? = name.nonEmptyOrNull()
Elvis
操作符(?:
):Elvis
操作符用于在左側表達式為空時提供默認值。這在處理可能為空的值時非常有用。val name: String? = getUser()
val displayName: String = name ?: "Unknown"
NonNullByDefault
注解:在 Kotlin 的源文件中,您可以使用 NonNullByDefault
注解來指定整個文件中的所有非空類型默認為非空。這有助于減少空指針異常的風險。@file:NonNullByDefault
package com.example
fun main() {
val user: User = getUser()
println(user.name)
}
請注意,這些工具和約定并不能完全消除空指針異常的風險,但它們可以幫助您編寫更健壯的代碼并減少潛在的錯誤。