Kotlin基础之lateinit关键字(五)

我是IT王魔王
这是我的第7篇IT系列原创

Kotlin系列我打算写出最适合初学者入门的文章

网上有很多文章,这些文章写的都不错
但是鄙人以为,这些文章有一个共同的特点(是优点,但同时也是缺点)
所以我用特点来形容

我一般不喜欢讲废话(这是一句废话,sorry)
能用图解决的尽量不用文字描述

一个简单的业务场景:给一个textView设置文字(不要在布局文件中指定)

/**
 * kotlin中的activity,其他不用管
 */
class KotlinStudyMainActivity : AppCompatActivity() {

    var view:TextView?=null //一个textView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_kotlin_study_main)
        //实例化
        view=findViewById(R.id.tvName)
        //设置文字
        view?.setText("奔波儿霸")
    }
}

结合本系列博客前面的内容,这个代码只能这样写。
但这样写有一个小问题
在实际的业务场景中,View永远不会为空,因为一个为空的View是没有意义的,但是,我们却声明了一个可以为空的View,这样一看起来比较矛盾,二会影响阅读性。

比较符合我们的需求的代码应该是这样的

理想中的代码

不过这样写会报错,因为我们声明了一个非空的变量。

此时该怎么办呢?于是我灵机一动,这样写


抖机灵的代码

激动的心,颤抖的手,马上运行一下看看效果

崩溃了

又双叒叕空指针了

又双叒叕空指针了

这样写报空指针的原因在于


image.png

怎么办?现在我们抽一支烟,冷静一下

抽一支烟

是时候请出我们今天的主角了 : lateinit

lateinit的使用

lateinit的作用:延迟初始化
具体来讲,这个关键字告诉编译器,我无法声明的时候就初始化,但是我保证我在使用前一定会初始化,你就别给我检查了。
通过这个关键字的使用,就可以完美解决上面的业务场景。
而这样的场景,在实际开发中有很多。
这里我就不一 一举例了。

打完收工

你可能感兴趣的:(Kotlin基础之lateinit关键字(五))