lateinit是kotlin的关键字,有别于lazy。他们是俩种不同的延迟初始化
lateinit 只用于变量 var。
使用lateinit,在变量前面添加lateinit关键字进行修饰就可以了
如lateinit var name: String
要在你的变量初始化后使用lateinit。如果你的变量没有初始化就是用了lateinit,程序会告诉你UninitializedPropertyAccessException
异常,并且提示你lateinit修饰的属性没有初始化。
可以使用isInitialized 来判断,属性有没有初始化。
参考代码如下:
class MyService{
fun performAction(): String = "foo"
}
class Test{
private lateinit var myService: MyService
fun checkInit(){
// 如果 myService 对象还未初始化,则进行初始化
if(!this::myService.isInitialized){
myService = MyService()
}
}
}
lateinit 不能用来修饰基本数据类型,因为基本类型的属性在类加载后的准备阶段都会被初始化为默认值。
lateinit不能修饰val变量,只能修饰可变的属性。