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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP