Kotlin – 使用“by lazy”和“lateinit”初始化屬性


Kotlin 庫為屬性宣告提供了兩種不同的訪問修飾符。

在本文中,我們將重點介紹這兩個訪問修飾符之間的區別,以及如何在應用程式中使用它們。

Lateinit

為了建立一個“lateInit”變數,我們只需要將關鍵字“lateInit”作為該變數的訪問修飾符新增。以下是一組在 Kotlin 中使用“lateInit”需要遵循的條件。

  • 將“lateInit”與可變變數一起使用。這意味著,我們需要將“var”關鍵字與“lateInit”一起使用。

  • “lateInit”僅允許用於非空資料型別。

  • “lateInit”不適用於基本資料型別。

  • 當變數屬性沒有任何**getter**和**setter**方法時,可以使用“lateInit”。

示例

我們將宣告一個變數為**lateInit**,我們將看到如何在整個程式中訪問它。

class Tutorial {

   lateinit var name : String

   fun checkLateInit(){
      // checking whether the value is assigned or not
      if(this::name.isInitialized)
         println("Your value is not assigned");

      else{
         // initializing name
         name = "www.tutorialspoint.com/"
         println(this.name)
         // this will return true
      }
   }
}

fun main() {
   var obj=Tutorial();
   obj.checkLateInit();
}

輸出

執行程式碼後,將生成以下輸出:

www.tutorialspoint.com/

延遲初始化

為了有效地管理記憶體,Kotlin 引入了一項名為**延遲初始化**的新功能。當使用**lazy**關鍵字時,只有在呼叫物件時才會建立該物件,否則不會建立任何物件。**lazy()**是一個函式,它接收一個 lambda 並返回一個**lazy**的例項,該例項可以用作已應用其上的延遲屬性的委託。它旨在防止物件的不必要初始化。

  • Lazy 只能與非空變數一起使用。

  • 變數只能是**val**。“var”不允許使用。

  • 物件僅初始化一次。此後,您將從快取記憶體中接收值。

  • 在應用程式中使用物件之前,不會初始化該物件。

示例

在此示例中,我們將宣告一個延遲變數**“myName”**,我們可以看到對程式碼這部分的呼叫只會發生一次,並且在初始化值後,它將在整個應用程式中記住該值。一旦使用延遲初始化分配了值,就不能重新分配它。

class Demo {
   val myName: String by lazy {
      println("Welcome to Lazy declaration");
      "www.tutorialspoint.com"
   }
}

fun main() {
   var obj=Demo();
   println(obj.myName);
   println("Second time call to the same object--"+obj.myName);
}

輸出

執行程式碼後,將生成以下輸出:

Welcome to Lazy declaration
www.tutorialspoint.com
Second time call to the same object--www.tutorialspoint.com

更新於: 2021年10月27日

10K+ 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告