Kotlin lazy意思

在Kotlin中,lazy是一個函式,用於創建一個延遲初始化的值。這意味著只有在第一次需要該值時,才會進行計算。lazy函式返回一個Lazy對象,它代表了一個延遲初始化的值。

Lazy對象提供了兩種訪問延遲初始化值的方式:

  1. getValue(thisRef: Any?, property: KProperty<*>): T:這是一個擴展函式,可以在屬性中使用,它會在第一次被調用時計算值,之後直接返回計算好的值。
val lazyValue by lazy {
    // 計算值
    expensiveComputation()
}
  1. value: T:直接獲取計算好的值,如果值還沒有被計算,會觸發計算。
val lazyValue = lazy {
    // 計算值
    expensiveComputation()
}

// 獲取值
val value = lazyValue.value

Lazy對象還提供了其他一些方法,比如isInitialized可以檢查值是否已經被計算,reset可以重置計算,使得下次訪問時重新計算值。

lazy函式有兩個重載版本,一個接受一個lambda表達式作為參數,另一個接受一個工廠函式作為參數。工廠函式版本允許在計算值時傳遞參數。

val lazyValue by lazy(LazyThreadSafetyMode.NONE) {
    // 計算值
    expensiveComputation(someParameter)
}

LazyThreadSafetyMode是一個枚舉類,它定義了如何在多執行緒中處理延遲初始化值的計算。有三種模式:

  1. NONE:不保證執行緒安全,每次訪問都可能計算值。
  2. SYNCHRONIZED:保證執行緒安全,每次訪問都保證計算值只進行一次。
  3. PUBLICATION:保證只計算一次值,但是不保證計算是在調用getValue時發生的。

lazy函式通常用於那些初始化開銷較大或者需要避免在不需要時進行初始化的場景。