Kotlin (1): lateinit
(上圖說明: Google讓學習Java的工程師變成了上世紀的老人,如果不學習kotlin的話...)
總之,我是在憤怒之下開始被迫學習kotlin.2022開始,好像不學習Kotlin似乎是丟臉的工程師.
-----
Kotlin對android開發專案的改變:
在 build.gradle 會新增幾行:
plugins {
id 'com.android.application'
id 'kotlin-android'
}
可以發現Dependencies會多幾個-ktx的相關套件.
dependencies {
implementation 'androidx.core:core-ktx:1.8.0'
implementation 'androidx.appcompat:appcompat:1.4.2'
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.2'
implementation 'androidx.navigation:navigation-ui-ktx:2.4.2'
}
來看看程式碼:
class MainActivity : AppCompatActivity() {
private lateinit var appBarConfiguration: AppBarConfiguration
private lateinit var binding: ActivityMainBinding
上面的lateinit 是甚麼意思呢?
答案是: lateinit 為延遲初始化 的意思. (其實很好記 late + init 遲一些時間我再init這變數.)表示我們能確定這個變數在後續一定會被初始化,就加上這修飾字.
這樣的話compiler就不會跟我們警告說要使用?來判斷這個變數是否為空。
因為我們能100%確定這變數之後會被指派,就不要警告我了.
但是這樣也要小心,萬一之後沒有指派值,就使用的話,可是會直接APP當機的.
Caused by: kotlin.UninitializedPropertyAccessException: lateinit property binding has not been initialized
但是如果直接拿掉lateinit 會怎樣?
這會導致android studio 發出一個紅色Error顯示 Property must be initialized or be abstract.
這樣程式連執行都不能執行.
基本上JAVA沒有這個關鍵字,所以這是新的東西.
JAVA如果一個變數是NULL,然後這變數被執行, 就直接NullPointerException.
因此會造成當機或是拋出例外,這就是app常常會突然當掉閃退的原因.
所以Kotlin在這方面會做一個簡易的檢查,防止null exception 的產生.間接的大幅減少app閃退的狀況發生.
留言
張貼留言