为什么我无法访问 `::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.*
不足以获取它。
我正在尝试使用已知接口访问未知 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.*
不足以获取它。