Kotlin 的空安全(Null Safety)是為了根除 Java 最常見的 NullPointerException (NPE)。在 Kotlin 中,類型系統會強制區分「可以為空」和「不可以為空」的變量。
可空類型與不可空類型
在定義變量時,Kotlin 默認所有類型都是不可空的。如果你嘗試給它賦值 null,編譯器會直接報錯。
如果你希望一個變量可以存放 null,必須在類型後面加上問號。例如 String 不能為空,而 String? 則代表可以存放字符串或 null。
這種機制讓潛在的崩潰問題在編譯階段就被抓出來,而不是等到用戶使用時才發生。
安全調用與強行轉換
當你有一個可空變量時,你不能直接調用它的方法。你有幾種處理方式:
- 安全調用符
?.:這是最常用的。如果變量是 null,調用會直接返回 null,而不會崩潰。 - 非空斷言
!!:如果你百分之百確定變量不為空,可以用這個。但如果猜錯了,程序會立刻崩潰。這通常是不建議的做法。
Elvis 運算符 ?:
這個符號用來提供「默認值」。當左邊的表達式結果為 null 時,它會執行右邊的內容。
這在處理 UI 顯示時非常好用,比如 val name = user?.name ?: "匿名用戶"。如果用戶數據不存在,就會直接顯示默認稱呼。
類型轉換與檢查
Kotlin 會自動進行類型轉換(Smart Cast)。如果你已經用 if 檢查過變量不為空,在該代碼塊範圍內,你可以直接把它當成不可空類型來用,不需要再寫問號。
這讓代碼保持乾淨,同時又具備極高的安全性。這就像是在寫代碼前加了一層過濾網,過濾掉所有可能讓程序當機的空指針。