給定一個類的實體,我試圖訪問具有已知介面的未知類的伴隨物件。
代碼如下:
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.
^
我不認為這是以下任何一個問題的重復,因為我特別詢問發生了什么變化或我誤解了什么,以至于以下兩個問題中的解決方案對我不起作用:
如何從 kotlin 中的物件實體訪問伴隨物件?
Kotlin 通過反射呼叫伴隨函式
uj5u.com熱心網友回復:
在評論中進行了簡短的討論后,結果證明它只是一個缺失的匯入。
companionObject不是 的成員KClass,而是它的擴展名,所以我們可能可以訪問KClassobject,但我們看不到它的companionObject屬性。此外,由于它是kotlin-reflect庫的一部分,它不在kotlin.reflect包中,而是在 中kotlin.reflect.full,因此匯入kotlin.reflect.*不足以獲取它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/345173.html
標籤:科特林 反射 伴侣对象 kotlin 反射 kotlin-同伴
上一篇:滾動后,選中的復選框在recyclerview中取消選中
下一篇:如何手動更新kotlin流程
