kotlin:Lateinit 和 Lazy

Kotlin是现代的瑰宝,已被证明是对 Android 开发人员非常有用的语言。它提供了易于使用的功能,最重要的是对于任何背景的开发人员都非常容易理解,无论是 Java、JavaScript 还是刚开始探索 Android 开发的开发人员。凭借其出色的功能,Kotlin 在 Android 开发者社区中证明了它的价值,并得到了应有的喜爱。所以今天我们要讨论两个非常重要的特性—— Lateinit和Lazy,它们是一个初始化属性。

因此,在了解它如何帮助之前,让我们了解它解决的问题陈述。

问题1: 我们希望声明一个变量,但不想在创建过程中对其进行初始化,因为我们确定在执行之前,它肯定会在程序中的某个时刻被初始化。

解决方案:在这里,我们有两种选择,一种是将变量声明为可空值,这通常会给我们带来麻烦,因为有些函数需要额外处理可空值。所以这就是 Kotlin 非常重要和美丽的特性——lateinit。

Kotlin 中的Lateinit是一个值得信赖的关键字,它负责并告诉编译器:

让他们暂时声明它,我向您保证,他们将在访问或使用它之前对其进行初始化。

private lateinit var empName : String
private fun employee(empId: String){
      empName = departments.getEmpName(empId)
}

我想补充的还有一件事是,lateinit 相信您会初始化变量,因此请保持您的话,如果您在任何时候不确定初始化,只需使用isInitialized进行检查。

你相信这就是lateinit。正是这个简单而有用的功能。现在让我们看看我们的第二个问题陈述,看看惰性如何变得有用。

问题2: 有时我们有一些类的对象初始化非常繁重,导致我们的整个程序被延迟。

解决方案:不要继续命名它可能是懒惰的名字,但它证明它在使用时是值得的。因此,当一个对象创建被声明为使用惰性初始化时,它不会创建该对象,直到该对象被调用。这是一个非常重要的优势,但第二个优势也很有趣。一旦对象被初始化,我们将在调用时再次使用相同的对象。

class MainClass {
    private val heavyObj: HeavyClass by lazy {
        println("Heavy Object is initialized")
        HeavyClass()
    } 

    fun callObject() {
        println(heavyObj)
    }
}

fun main(args: Array<String>) {
    val mainClass = MainClass()
    println("MainClass is initialized")
    mainClass.callObj()
    mainClass.callObj()
}

在上面的示例中,我们可以看到 HeavyClass 的对象仅在访问时创建,并且在 main() 函数中到处都是相同的对象。

如果你对kotlin感兴趣,但却不知道如何学习,怎么去学习,在这里为了帮想学习Kotlin 的小伙伴,不烦看看这份《高级Kotlin强化实战学习手册(附Demo)》供Android开发者进阶学习 Kotlin,内容涵盖 Kotlin 入门教程、Kotlin实战避坑指南、Kotlin Jetpack 实战三大模块。

这份资料在文末直接免费领取



需要文中资料的小伙伴,点击下面卡片免费领取kotlin的学习资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值