在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
}