[Day2] Android - Kotlin笔记: lazy

来介绍一下lazy

以下以TextView为例


我们一般init(初始化一个元件):

    private var textView: TextView? = null

此方式在後续使用到textView的程序码都要加上?才能使用

/

或是使用lateinit的话(参数延迟初始化):

    private lateinit var textView: TextView

假设任何情况下,在後面程序码没有将textView成功初始化的话,
就会crash报错:lateinit property tv has not been initialized


lazy

使用时机:宣告变数
第一次使用时才会执行内部程序码,
且只有在会用到他时才会产生该值。

使用lazy,可以直接在内部宣告其初始状态。

    private val tv: TextView by lazy {
        findViewById(R.id.textView)
    }
class MainActivity : AppCompatActivity() {

    private val tv: TextView by lazy {
        findViewById(R.id.textView)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        tv.text = "hello world"
    }
}

lazy只会在第一次使用时会被呼叫执行,
所以假设注解了

//    tv.text = "hello world"

tv这个值就不会被产生


比起initlateinit
lazy更为方便且安全,
也能更有效地节省空间。

目前宣告各式各样的变数,基本上都用lazy,
觉得很方便所以分享一下。

第一次写文章,各方面都有些别扭,不好意思了。

参考资源:


<<:  [iT铁人赛Day5]JAVA的优先顺序

>>:  [Day4]C# 鸡础观念- 核心的数据成员~变数(二)

Day10 建造App(4)

我们前三天已经完成建构一个完整APP的90%了,而我们今天要解决的问题是,要怎麽让我们的Django...

28.unity音乐与音效(AudioSource)

音乐是游戏不可或缺的一部分,据说只要加上音乐,游戏就完成一半了! UNITY添加音乐之前,必须先给游...

Day2-为小学生撰写的网站小游戏_template精简程序码

昨天写的小网站後续看文章时觉得有一部分JS有硬干的嫌疑(?) 所以把一些部分做了改动 首先使用了HT...

GCP Container Registry

Container Registry 今天说一下如何在GCP上建立Docker Image私仓(Do...

Powershell 入门参数属性(1)

对于 Powershell 脚本的参数,我们可以通过一些属性来限制参数。 今天我们就来看看,怎么通过...