You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 22:22:28