Kotlin学习笔记二十二、类属性延迟初始化

延迟初始化主要有一下几种方式:

一、lateinit

“lateinit”关键字的使用示例:

lateinit var strData:String
fun main(args: Array<String>) {
    strData = "任缥缈"
}

kotlin关键字“lateinit”使用注意事项:

1、lateinit会让编译器忽略变量的初始化 ,同时不支持Int、Boolean、Char等基本数据类型;

2、开发者必须在能够完全掌握变量的生命周期变化的场景下使用关键字“lateinit”,否则容易使用到一个值为空的变量;

3、尽可能不要再复杂的场景或者逻辑中使用“lateinit”关键字,它会让你的代码更加的脆弱,甚至你自己都不知道他是在什么地方完成初始化的,这一点后面可以有其他的方式来优化处理;

4、kotlin的1.2版本新增的判断“lateinit”关键字修饰的变量属性是否初始化的方法API(.isLateinited)尽可能的不要使用,因为这个API是一个if的判断,每次都使用的话,一是大幅增加代码量,增加逻辑嵌套。同时还会掩盖问题。而开发中我们应该尽可能的让问题暴露出来,方便问题的查找和修复;

为了避免上述“延迟初始化”的一些问题和麻烦,我们有新的解决方案,那就是 “by lazy”。

二、by lazy

延迟初始化在Android开发中最常见的场景莫过于控件的初始化,Java环境下通常做法是:先定义公共的控件变量xxx,然后再在onCreate方法里通过xxx.findviewbyid(R.id.xxx)的方式完成初始化。

但是在kotlin语言中,变量需要定义时就完成初始化。即便是有了“lateinit”关键字,我们可以延迟初始化,但同样面临上面我们提到的一些问题。因此我们便有了一个全新的延迟初始化解决方案:“by lazy”,具体用法,同样我们还是以Android开发里面的控件初始化为例,如下:

private val txXiaoXiao by lazy {
    findViewById<TextView>(R.id.tvXiaoXiao)
}

上面的变量“txXiaoXiao ”是在首次被调用访问时才会执行“{}”里面的lambda表达式“findViewByIdxxxx”完成变量的初始化,然后后面将不会再被创建。
另外,这种方式还将变量的创建和初始化关联在一起,一眼就能知道是如何完成初始化的,不用到处搜索,查询。

三、总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值