lateinit by lazy
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lateinit by lazy相关的知识,希望对你有一定的参考价值。
参考技术A Kotlin中延迟初始化的方法:
lateinit , by lazy
lateinit用在var变量,作用:编译器检查时不因为变量未初始化而报错。
private lateinit var mRootView: View
然后在inflateView之后再对变量进行赋值,使用的时候默认非空
by lazy 属性委托, 用在val常量(相当于java 中final变量):
private val a: Int by lazy 5
虽然两者都可以推迟属性初始化的时间,但是lateinit var只是让编译期忽略对属性未初始化的检查,后续在哪里以及何时初始化还需要开发者自己决定。
而by lazy真正做到了声明的同时也指定了延迟初始化时的行为,在属性被第一次被使用的时候才自动初始化,且保证了线程安全。
初始化时 默认的线程执行模式:
LazyThreadSafetyMode.SYNCHRONIZED:-
锁用于确保只有一个线程可以初始化Lazy实例。
LazyThreadSafetyMode.PUBLICATION:-
并发访问未初始化的Lazy实例值时,可以多次调用
Initializer函数,但是只有第一个返回的值将用作Lazy实例的值。
LazyThreadSafetyMode.NONE:-
不使用锁来同步对Lazy实例值的访问。如果从多个线程访问该实例,则其行为是不确定的。除非保证永不从多个线程初始化Lazy实例,否则不应使用此模式。
以上是关于lateinit by lazy的主要内容,如果未能解决你的问题,请参考以下文章