为什么我无法访问 `::class.companionObject`?

Why can I not access `::class.companionObject`?

我正在尝试使用已知接口访问未知 class 的伴随对象,给定 class.

的实例

代码如下:

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

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

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

输出:

$ kotlinc -d main.jar main.kt && kotlin -classpath main.jar MainKt
main.kt:8:27: error: unresolved reference: companionObject
        print(this::class.companionObject) // Unresolved reference.
                          ^
main.kt:9:27: error: unresolved reference: companionObjectInstance
        print(this::class.companionObjectInstance) // Unresolved reference.
                          ^
main.kt:14:20: error: unresolved reference: companionObject
    print(T::class.companionObject) // Unresolved reference.
                   ^
main.kt:15:20: error: unresolved reference: companionObjectInstance
    print(T::class.companionObjectInstance) // Unresolved reference.
                   ^

我认为这不是以下任何一个问题的重复,因为我特别询问发生了什么变化或我误解了什么,因此以下两个问题中的解决方案对我不起作用:

在评论中进行了简短的讨论后,发现它只是缺少导入。

companionObject 不是 KClass 的成员,而是它的扩展,所以我们有可能访问 KClass 对象,但我们看不到它的 companionObject 属性。此外,由于它是 kotlin-reflect 库的一部分,它不在 kotlin.reflect 包中,而是在 kotlin.reflect.full 中,因此导入 kotlin.reflect.* 不足以获取它。