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()
}
运行结果:
![]()
三,例子
代码:
//处理按钮点击事件
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 已初始化,值为:我是赵四
}
运行结果:
![]()
浙公网安备 33010602011771号