Kotlin可空型別與非空型別以及lateinit
的作用
在 Kotlin 中,變數可以是可空型別或非空型別。可空型別表示變數可以包含一個空值(null
),而非空型別表示變數不能包含空值。
可空型別與非空型別
-
非空型別:預設情況下,Kotlin 中的變數是非空型別。例如,
var recyclerView: RecyclerView
表示這個變數永遠不能為null
。在編譯時,Kotlin 會強制保證非空型別的變數在任何時候都不為null
。 -
可空型別:可空型別變數可以包含
null
值。例如,var recyclerView: RecyclerView?
表示這個變數可以為null
。在使用可空型別變數時,必須進行空值檢查以避免NullPointerException
。
lateinit
的作用
使用 lateinit
修飾符可以宣告一個非空型別的變數,並允許稍後初始化它。這在 Android 開發中很常見,因為許多檢視元件(如 RecyclerView
)需要在 onCreate
或 onViewCreated
方法中初始化,而不能在宣告時立即賦值。
如果不使用 lateinit
,可以選擇將變數宣告為可空型別(即 RecyclerView?
),但這樣在每次使用該變數時都需要進行空值檢查,增加了程式碼的複雜性。例如:
// 不使用 lateinit,宣告為可空型別
private var recyclerView: RecyclerView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 初始化 recyclerView
recyclerView = findViewById(R.id.my_recycler_view)
// 使用 recyclerView 時需要進行空值檢查
recyclerView?.layoutManager = LinearLayoutManager(this)
recyclerView?.adapter = MyAdapter(myDataset)
}
使用 lateinit
則可以避免每次使用變數時的空值檢查:
// 使用 lateinit 宣告非空型別變數
private lateinit var recyclerView: RecyclerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 初始化 recyclerView
recyclerView = findViewById(R.id.my_recycler_view)
// 直接使用 recyclerView,無需空值檢查
recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.adapter = MyAdapter(myDataset)
}
總結
使用 lateinit
修飾符可以在 Kotlin 中宣告一個非空型別的變數,並允許稍後初始化它,從而避免了每次使用該變數時的空值檢查,提高了程式碼的簡潔性和可讀性。
程式碼參考