成品网站app开发,9k9k网页游戏开服表,wordpress 文艺小清新,海淀教育人才网站序、完善一下曾经的草稿。
Kotlin通常要求我们在定义属性后立即对起进行初始化#xff0c;当我们不知道理想的初始值时#xff0c;这样做似乎很奇怪#xff0c;尤其是在生命周期驱动android属性的情况下。
lateinit
简介
lateinit#xff0c;Kotlin提供的一个可以延迟初…序、完善一下曾经的草稿。
Kotlin通常要求我们在定义属性后立即对起进行初始化当我们不知道理想的初始值时这样做似乎很奇怪尤其是在生命周期驱动android属性的情况下。
lateinit
简介
lateinitKotlin提供的一个可以延迟初始化的方案。和类属性一起使用的时候lateinit修饰符会阻止该属性在其类的对象构造时被初始化。
lateinit修饰的变量只有在初始化时才会分配内存而不是在声明对象时。 在Kotlin中所有变量都要有非空限制Kotlin中是默认是空安全的任何属性的声明都必须有初始化值。所以在声明变量的时候有以下两种
变量支持可空“”才能设置为null var map: HashMapString, Int? null
如果我们不做非空操作则需要给变量初始化赋值(非空属性必须在定义的时候初始化)。 var map: HashMapString, Int HashMap()例如在项目中的我们网络请求的数据data变量首先不想在创建过程中对其初始化并且我们确定在执行之前一定会在我们项目的某个地方被赋值。可以使用lateinit。 private lateinit var homeBannerDatas: ArrayListHomeBannerprivate lateinit var courseDatas: MutableListCourseTypeBeanPS
1.lateinit只能修饰, 非kotlin基本类型的变量。
因为每当lateinit访问一个属性时Kotlin 都会在后台为其提供一个空值以指示该属性尚未初始化。原始类型不能是null因此无法指示未初始化的属性。
2.只能用在var变量上 by lazy
是属性委托一种。它是属性懒加载的一种实现方式在对属性使用时才对属性进行初始化并且支持对属性初始化的操作时进行加锁使属性的初始化在多线程环境下线程安全。lazy默认是线程安全的。
lazy本质上是创建一个应用但仅在第一次使用或调用该属性时进行初始化。 //延迟属性lazy//延迟属性lazy是一个函数接受一个Lambda表达式作为参数返回一个lazyT实例的函数。//返回的实例可以作为实现延迟属性的委托//第一次调用get()会执行已经传递给lazy()的lambda表达式并记录结果//后续调用get()只会返回记录的结果private val spPrefs: SharedPreferences by lazy {EduApp.context.getSharedPreferences(file_name, Context.MODE_PRIVATE)}