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的学习资料