如何才能通过名称获得对Kotlin对象的引用?

如果我有一个顶层对象声明如何才能通过名称获得对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

以上是 如何才能通过名称获得对Kotlin对象的引用? 的全部内容, 来源链接: utcz.com/qa/262001.html

回到顶部