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

为什么Kotlin中无法访问`::class.companionObject`属性?

问题根因

你遇到的编译报错不是Kotlin版本变动导致的,companionObject 和 companionObjectInstance 两个属性属于Kotlin反射扩展库的API,默认不会被引入到编译环境中,你漏了依赖引入和导包步骤,因此会提示找不到引用。

解决步骤

1. 引入Kotlin反射依赖

  • 如果使用Gradle(Kotlin DSL)构建,在build.gradle.kts中添加依赖:
dependencies {
    implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
}
  • 如果使用Maven构建,在pom.xml中添加依赖:
<dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-reflect</artifactId>
    <version>${kotlin.version}</version>
</dependency>
  • 如果直接使用kotlinc命令行编译,需要添加-reflect参数自动引入反射库:
kotlinc -reflect -d main.jar main.kt && kotlin -classpath main.jar MainKt

2. 添加导入语句

在代码文件顶部添加反射扩展的导包:

import kotlin.reflect.full.companionObject
import kotlin.reflect.full.companionObjectInstance

3. 修正后可运行的完整代码

import kotlin.reflect.full.companionObject
import kotlin.reflect.full.companionObjectInstance

class AccessTest() {
    companion object {
        val prop = 5
    }
    fun getComp() {
        print(this)
        print(this::class)
        print(this::class.companionObject)
        print(this::class.companionObjectInstance)
    }
}

inline fun <reified T> getCompanion() {
    print(T::class.companionObject)
    print(T::class.companionObjectInstance)
}

fun main() {
    AccessTest().getComp()
    getCompanion<AccessTest>()
}

运行后即可正常输出companion对象的相关信息。

旧方案不生效的原因

你参考的相关回答都默认开发者已经了解Kotlin反射库需要单独引入,因此省略了依赖添加和导包的说明,并非方案本身失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:36:03