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
廣告