- 編譯器常量,已知值的屬性可以使用const修飾符標記爲編輯器常量,這些屬性需要滿足以下要求:
1.位於頂層或者是Object聲明或companion object的一個成員
2.以String或原生類型值初始化
3.沒有自定義getter
- 延遲初始化屬性和變量
1.一般地,屬性聲明爲非空類型必須在構造函數中初始化,然而,這樣經常不方便,例如:屬性可以通過依賴注入來初始化,或是在單元測試的setup方法中初始化,這種情況下,不能再構造函數內提供一個非空初始器。但仍然想在類體中引用該屬性時避免空檢測。爲處理這種情況,可以使用lateinit修飾符標記該屬性。
2.該修飾符只能用於在類體中的屬性(不是在主構造函數中聲明的var屬性,並且僅當該屬性沒有自定義getter或setter時)字Koltin1.2起,也用於頂層屬性與局部變量。該屬性或變量必須爲非空類型,且不能是原生類型
3.在初始化前訪問lateinit屬性會拋出沒有初始化的異常
4.檢測一個lateinit var是否已初始化:該屬性的引用上使用.isInitialized
class Rectangle {
lateinit var a: Person
}
class Person
fun main(args: Array<String>) {
if (!Rectangle::a.isLateinit) {
println("a需要初始化")
}
}