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

Kotlin:如何在伴生对象中调用主类方法并设置变量

解决伴生对象中访问主类实例成员的问题

嗨,刚接触Kotlin的话确实容易在伴生对象这里踩坑~你遇到的UnresolvedReference错误,核心原因是伴生对象属于类本身,而不是类的实例,但你的myVar和myFunc都是类的实例成员(必须通过类的对象实例才能访问),直接在伴生对象里调用自然会找不到引用。

下面给你两种常见的解决方案,根据你的实际需求来选:

方案一:传递类实例给伴生对象的函数

如果doStuff需要操作某个特定的MyClass实例的成员,那你可以把实例作为参数传给doStuff:

class MyClass {
    public var myVar: Boolean = false // 注意:Kotlin非空变量必须初始化,这里给个默认值
    public fun myFunc(num: Int): Int { 
        // 示例实现,你可以替换成自己的逻辑
        return num * 3
    }

    companion object {
        private fun doStuff(instance: MyClass){
            instance.myVar = true // 通过实例访问成员变量
            instance.myFunc(1)    // 通过实例调用成员函数
        }
    }

    // 比如在类内部调用的话,可以传this
    fun callDoStuff() {
        Companion.doStuff(this)
    }
}

外部调用的话,就先创建实例再传入:

val myObj = MyClass()
MyClass.Companion.doStuff(myObj)

方案二:把成员移到伴生对象中(类级别共享)

如果myVar和myFunc不需要依赖特定实例,是所有MyClass实例共享的逻辑,那直接把它们放到伴生对象里就行:

class MyClass {
    companion object {
        public var myVar: Boolean = false
        public fun myFunc(num: Int): Int {
            return num * 3
        }

        private fun doStuff(){
            myVar = true // 现在可以直接访问,因为都是伴生对象的成员
            myFunc(1)
        }
    }
}

额外提醒

你原来的代码里还有个小问题:public var myVar: Boolean没有初始化,Kotlin要求非空的可变变量必须有初始值,不然编译也会报错,上面的示例里已经帮你补上了默认值~

内容的提问来源于stack exchange,提问作者ocramot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:12:12