如果我有顶级对象声明
package com.example
object MyObject {}
如何将字符串com.example.MyObject
转换为对MyObject
的引用?
答案 0 :(得分:7)
如果您在类路径上有this,那么您可以使用kotlin-reflect
的objectInstance
属性
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