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时要根据实际情况选择合适的方式,以保证程序的正确性。