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

时间:2017-06-20 08:22:24

标签: reflection kotlin

如果我有顶级对象声明

package com.example

object MyObject {}

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

3 个答案:

答案 0 :(得分:7)

如果您在类路径上有this,那么您可以使用kotlin-reflectobjectInstance属性

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
}

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

来做
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
}

答案 1 :(得分:1)

你可以使用kotlin反射,例如:

val it = Class.forName("com.example.MyObject").kotlin.objectInstance as MyObject;

答案 2 :(得分:0)

相同的java代码,您需要使用Class.forName("com.example.MyObject")。现在你有一个Java类,但是使用kotlin扩展名,它会转换为Kotlin类。 Class.forName("com.example.MyObject").kotlin