如何在包级功能,成员等上使用反射?试图访问javaClass或class不工作,也没有package.
Kotlin尚不支持对顶级功能或属性的反思,但计划在未来进行.目前支持的唯一功能允许您获取与给定Java反射对象相对应的Kotlin反射对象,要求您事先使用Java反射:
kotlinFunctionkotlin.reflect.KFunction由java.lang.reflect.Method实例或实例返回java.lang.reflect.Constructor实例kotlinPropertykotlin.reflect.KProperty通过java.lang.reflect.Field实例返回实例要使用它们,必须首先使用Java反射获取相应的方法或字段:
package a
import kotlin.reflect.jvm.*
fun foo() {}
fun reflectFoo() {
// a.TestKt is the JVM class name for the file test.kt in the package a
val c = Class.forName("a.TestKt")
val m = c.getDeclaredMethod("foo")
val f = m.kotlinFunction!!
// f is a KFunction instance, so you can now inspect its parameters, annotations, etc.
println(f.name)
println(f.returnType)
...
}
Run Code Online (Sandbox Code Playgroud)