Kotlin:如何在包上使用反射?

Kotlin: How can I use reflection on packages?

如何在包级函数、成员等上使用反射?尝试访问 javaClassclass 无效,package.

也无效

Kotlin 尚不支持对顶级函数或属性的反射,但计划在未来支持。目前唯一支持的功能是让你获取给定 Java 反射对象对应的 Kotlin 反射对象,需要你事先使用 Java 反射:

  • kotlinFunction returns kotlin.reflect.KFunction 实例由 java.lang.reflect.Method 实例或 java.lang.reflect.Constructor 实例
  • kotlinProperty returns kotlin.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)
    ...
}