1、普通的kotlin属性初始化
private var mMLDLDSweepMap: MutableLiveData<LDSweepMap>? = null
private var mIRecordMapModel: IRecordMapModel? = null
init {
mIRecordMapModel = RecordMapModel()
}
fun getMLDLDSweepMap(): MutableLiveData<LDSweepMap> {
if (mMLDLDSweepMap == null) {
mMLDLDSweepMap = MutableLiveData<LDSweepMap>()
}
return mMLDLDSweepMap!!
}
kotlin属性必须要被初始化,因此我们只能给他赋值为null,而null不能赋值为一个非空值,意思是属性值默认为非空。导致我们只能通过?声明修饰其是一个可空的属性,于是就有了:
var mMLDLDSweepMap: MutableLiveData<LDSweepMap>? = null
下面使用的地方也一定要通过?修饰进行访问:
mMLDLDSweepMap?.postValue(data)
2、再来看下lateinit和by lazy
lateinit
lateinit延迟初始化,lateinit只能修饰var,不能修饰val;当我们编译时,编译器会把lateinit修饰的变量在这个类中所有方法遍历一遍,看有没有对它进行初始化,没初始化就会报错。因此lateinit修饰的变量一定是要进行初始化的。
by lazy
by关键字在kotlin中表达的委托的概念,by lazy只是会在使用到的时候进行初始化(类似懒汉式的单例),使用代理的方式调用get/set方法,所以var 不能声明by lazy修饰的属性
private val mMLDLDSweepMap: MutableLiveData<LDSweepMap> by lazy {
MutableLiveData<LDSweepMap>()
}
private val mIRecordMapModel: IRecordMapModel by lazy {
RecordMapModel()
}
fun getMLDLDSweepMap() = mMLDLDSweepMap