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+ 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.