kotlin: lateinit

一,功能

在定义属性时 , 可以使用 lateinit 关键字 设置该属性的 延迟初始化 , 在 实例对象 创建时不进行初始化 , 在使用该属性之前对其进行初始化即可 ;

表示我先不给一个初始值,编译期的时候也无需进行非空判断,后面我会找时机给他赋值,
即lateinit的作用为编译期在检查时不要因为属性变量未被初始化而报错

限制:

只能修饰非空变量 : 不能修饰可空变量
只能修饰引用数据类型 : 不能修饰 8 种基本数据类型  (因为基本类型的属性在类加载后的准备阶段都会被初始化为默认值)
只能用来修饰类属性,不能用来修饰局部变量
只适用于可变变量lateinit 只能用于 var 变量,不能用于 val

二,例子

代码:

        //处理按钮点击事件
        binding.button1.setOnClickListener {
            class Hello{
                lateinit var name: String

                fun logName() {
                    if(::name.isInitialized) {
                        println("name 属性已初始化,值为 $name")
                    } else {
                        println("name 属性未进行初始化操作")
                    }
                }
            }

            var hello = Hello()
            hello.logName()

            hello.name = "Tom"
            hello.logName()

        }

运行结果:

 image

三,例子

代码:

        //处理按钮点击事件
        binding.button2.setOnClickListener {
            class Example {
                lateinit var text: String // 延迟初始化的变量

                //在方法中完成初始化
                fun initText(name: String) {
                    text = name
                }

                fun printText() {
                    if (this::text.isInitialized) { // 检查是否已经初始化
                        println("text 已初始化,值为:"+text)
                    } else {
                        println("text 未初始化")
                    }
                }
            }

            val example = Example()
            example.printText() // 输出:text 未初始化
            example.initText("我是赵四")
            example.printText() // 输出:text 已初始化,值为:我是赵四
        }

运行结果:

image

 

posted @ 2025-09-06 08:39  刘宏缔的架构森林  阅读(32)  评论(0)    收藏  举报