如果我有一個頂層對象聲明如何才能通過名稱獲得對Kotlin對象的引用?
package com.example
object MyObject {}
我怎麼能轉換成字符串com.example.MyObject
進入到MyObject
參考?
如果我有一個頂層對象聲明如何才能通過名稱獲得對Kotlin對象的引用?
package com.example
object MyObject {}
我怎麼能轉換成字符串com.example.MyObject
進入到MyObject
參考?
如果你在classpath有kotlin-reflect
那麼你可以使用的KClass
fun main(args: Array<String>) {
val fqn = "com.example.MyObject"
val clz: Class<*> = Class.forName(fqn)
val instance = clz.kotlin.objectInstance
println(instance) // [email protected]
}
的objectInstance
財產,如果你沒有做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) // [email protected]
}
您可以使用科特林反射,例如:
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