Kotlin的延迟初始化
Kotlin提供了lateinit var和by lazy两种延迟初始化的方式,它们都能够帮助我们实现延迟初始化。
lateinit var
lateinit var 变量名:类型
lateinit var是Kotlin提供的一种延迟初始化的方式,它可以帮助我们在没有初始化变量的情况下使用变量,但是它的使用方式有一定的要求:
- 1. 变量必须是非空类型,不能是基本类型;
- 2. 变量必须在使用前进行初始化;
- 3. 变量不能是可空类型;
- 4. 变量不能在构造函数中使用;
使用lateinit var的例子如下:
class Example {
lateinit var str: String
fun init() {
str = "Hello World"
}
fun print() {
println(str)
}
}
fun main(args: Array) {
val example = Example()
example.init()
example.print()
}
by lazy
val 变量名:类型 by lazy {
//初始化代码
}
by lazy是Kotlin提供的一种延迟初始化的方式,它可以帮助我们在没有初始化变量的情况下使用变量,但是它的使用方式有一定的要求:
- 1. 变量必须是可空类型,不能是基本类型;
- 2. 变量必须在使用前进行初始化;
- 3. 变量可以是可空类型;
- 4. 变量可以在构造函数中使用;
使用by lazy的例子如下:
class Example {
val str: String by lazy {
"Hello World"
}
fun print() {
println(str)
}
}
fun main(args: Array) {
val example = Example()
example.print()
}
区别与应用
从上面的介绍可以看出,lateinit var和by lazy之间有一定的区别:
- 1. lateinit var只能用于非空类型,而by lazy可以用于可空类型;
- 2. lateinit var不能在构造函数中使用,而by lazy可以在构造函数中使用;
我们在使用lateinit var和by lazy时要根据实际情况选择合适的方式,以保证程序的正确性。