Android_Question
Android_Question copied to clipboard
kotlin中的两种懒加载区别?(by lazy、lateinit)
by lazy是通过代理模式来实现的,本质上是一个block在第一次返回的时候执行内部代码,之后返回的时候直接返回存储好的结果。lateinit是一个延迟加载的声明,声明稍后会加载这个变量,使用前要先判断一下lateinit声明的对象是否已经加载。
lateinit var只能用来修饰类属性,不能用来修饰局部变量,并且只能用来修饰对象,不能用来修饰基本类型(因为基本类型的属性在类加载后的准备阶段都会被初始化为默认值)。 by lazy要求属性声明为val,即不可变变量,在java中相当于被final修饰。这意味着该变量一旦初始化后就不允许再被修改值了(基本类型是值不能被修改,对象类型是引用不能被修改)。{}内的操作就是返回唯一一次初始化的结果。