如何通过名称获取对Kotlin对象的引用?

Dun*_*gor 3 reflection kotlin

如果我有一个顶级对象声明

package com.example

object MyObject {}
Run Code Online (Sandbox Code Playgroud)

如何将字符串com.example.MyObject转换为引用MyObject

Ser*_*rCe 7

如果你有kotlin-reflect类路径,那么你可以使用的objectInstance属性KClass

fun main(args: Array<String>) {
    val fqn = "com.example.MyObject"
    val clz: Class<*> = Class.forName(fqn)
    val instance = clz.kotlin.objectInstance
    println(instance) // com.example.MyObject@71623278
}
Run Code Online (Sandbox Code Playgroud)

如果你没有,kotlin-reflect那么你可以用一种普通的旧java方式来做

fun main(args: Array<String>) {
    val fqn = "com.example.MyObject"
    val clz: Class<*> = Class.forName(fqn)
    val field: Field = clz.getDeclaredField("INSTANCE")
    val instance = field.get(null)
    println(instance) // com.example.MyObject@76ed5528
}
Run Code Online (Sandbox Code Playgroud)