如何检查Kotlin中Companion Object的lateinit变量是否已初始化?
检查Companion Object中lateinit变量的初始化状态
嘿,这个问题我之前也折腾过,其实解决思路很清晰——Companion Object里的lateinit变量,得通过伴生对象的属性引用来检查初始化状态,而不是直接用类名加变量名的方式~
先纠正你代码里的小笔误(myGloablLateInit应该是myGlobalLateInit),然后来看正确的实现方式:
完整修正代码
class MyClass { companion object { lateinit var myGlobalLateInit: String } lateinit var myLocalLateInit: String fun settingVariable() { // 普通类的lateinit变量检查,原有写法没问题 if (!this::myLocalLateInit.isInitialized) { myLocalLateInit = "I am set" } // Companion Object的lateinit变量检查,正确写法 if (!MyClass.Companion::myGlobalLateInit.isInitialized) { myGlobalLateInit = "I am set" } } }
简化写法
因为Kotlin允许直接通过类名访问Companion Object的成员,所以也可以省略Companion,用更简洁的写法:
if (!MyClass::myGlobalLateInit.isInitialized) { myGlobalLateInit = "I am set" }
原理小说明
Companion Object在Kotlin里本质是一个隐藏的静态内部类,MyClass.Companion就是这个内部类的实例引用。通过MyClass.Companion::myGlobalLateInit我们拿到了该变量的属性引用,进而可以调用isInitialized来判断是否已经初始化。
内容的提问来源于stack exchange,提问作者Elye
相关产品推荐
相关产品推荐

