为什么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
相关产品推荐
相关产品推荐

