作者:James Lau, 產品經理
在使用 Java 程式語言時,最常見的痛處之一是在存取空引用 (null reference) 成員時,系統會報出 NullPointerException。Kotlin 可有效地避免這問題的發生,它通過將可空型別 (nullable type) 與非空型別 (non-nullable type) 匯入型別系統,幫助您消除程式碼中的 NullPointerException 錯誤,從而提升 app 的整體質量。Kotlin 程式碼呼叫寫入 Java 語言中的 API 時,會依靠上述 API 中的可空性註解來決定每個引數的可空性,以及返回值型別。未註解的引數和返回值型別將被視為平臺型別,從而弱化 Kotlin 的空值安全保證。
最新的 Android 9 包含了 Android SDK 的更新,為一系列最常用的 API 加上了可空性註解。您的 Kotlin 程式碼在呼叫 SDK 中任一已註解的 API 時,可完好保留空值安全保證。即使在使用 Java 程式語言時,您依舊可以通過使用 Android Studio 檢測可空性協議違規,並從這些註解中獲益。
新的 Android SDK 作為 Android 9 連帶釋出的一部分,包含了一些常用 API 的可空性註解,當 Kotlin 呼叫了 SDK 中任何帶有註解的 API 時,它能預留出空安全性 (null-safety) 保障。而使用 Java 的開發者也可以利用 Android Studio 捕捉可空合約違規行為,從而有效利用這些可空性註解。
小變化 大改善
通常情況下,Kotlin 中違反可空性協議時會導致編譯錯誤。為保證已包含註解的 API 可與您的現有程式碼相容,我們採用了一個由 Kotlin 編譯器團隊提供的內部機制來對最新註釋的 API 進行註解。新註釋的 API 僅觸發警告,而不會導致 Kotlin 編譯器報錯。這必須使用 Kotlin 外掛 1.2.60 或更新版本。
近期加入的可空性註解只會產生警告而非錯誤,但在下一年度的 Android SDK 中 ,我們將提高錯誤嚴重等級。此舉的目的是為了給開發者預留出足夠時間調整程式碼。
如何使用更與 Kotlin 更合拍的 SDK
首先,在 Android Studio 內選擇 Tools > SDK Manager。選擇左欄中的 “Android SDK”,確保 “SDK Platforms” 的標籤已開啟。
檢查 Android 8.+ (P) 並點選 OK。通過該步驟,可實現 Android SDK 平臺 28 級第 6 版的安裝 (若之前尚未安裝)。此後,將專案的編譯 SDK 版本設定為 API 28 級,來啟用新款 Android Pie SDK 的可空性註釋。
如果您當前的 Kotlin 外掛尚未更新到最新版本,您需要通過 Android Studio 對其進行更新。請選擇 “Tools Kotlin > Configure Kotlin Plugin Updates” 檢查並確保 Kotlin 外掛版本是 1.2.60 或更新版本。
配置設定完成後,如果您的程式碼違反 Android SDK 中的可空性協議,您的專案將顯示警告,具體示例如下:
此外,如果您呼叫的 Android API 不符合可空性要求,Android Studio 的程式碼編輯器上同樣會顯示相關警告。具體示例如下:
利用 Java 程式語言中的可空性註解
即使您的程式碼採用的是 Java 程式語言,您依舊可以從新的可空性註解中獲益。在預設狀態下,Android Studio 會顯示違反可空性協議的警告,具體示例如下:
為保證您已啟用該檢查功能,您可訪問 IDE 的設定頁面並搜尋 “Constant conditions& exceptions” 檢查,並確保相關項已經過檢查。
如果您使用的是 Java 程式語言,違反可空性協議的將不會產生任何編譯器警告或報錯。僅 IDE 的程式碼檢查功能可檢示這些問題。
此外,您可在整個專案中檢查程式碼,並審閱總體結果。點選 “Analyze>Inspect Code…” 來開始該過程。
下一步
Android SDK API 的介面眾多,目前為止,我們僅標註了小部分的 API,尚有諸多工作在等著我們。在未來即將釋出的幾個 Android SDK 版本中,我們將繼續為現有 Android API 增加可空性註解,並確保所有的新增 API 也經過註釋這一環節。
具備與 Kotlin 更合拍的 Android SDK、AndroidX 中的可空性註解 (Jetpack 系列的一部分) 以及 Android KTX 之後,我們將繼續為使用 Kotlin 的開發者改進 Android API 。如果您尚未嘗試 Kotlin,我們希望您試用一下。Kotlin 不僅能讓您的程式碼更加簡潔,還能提升您 app 的穩定性。
祝您使用 Kotlin 愉快!
點選這裡 “我們願意更好地傾聽您的聲音 “