我怎样才能得到一个Kotlin对象的名字?
如果我有顶级对象声明
package com.example object MyObject {}
如何将字符串com.example.MyObject
转换为对MyObject
的引用?
如果你在类路径上有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
那么你可以用普通的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 }
你可以使用kotlin反射,例如:
val it = Class.forName("com.example.MyObject").kotlin.objectInstance as MyObject;
同样是一个java代码,你需要使用Class.forName("com.example.MyObject")
。 现在你有一个Java类,但使用kotlin
扩展,它转换为Kotlin类。 Class.forName("com.example.MyObject").kotlin