Kotlin:如何在包上使用反射?
Kotlin: How can I use reflection on packages?
如何在包级函数、成员等上使用反射?尝试访问 javaClass
或 class
无效,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)
...
}
如何在包级函数、成员等上使用反射?尝试访问 javaClass
或 class
无效,package
.
Kotlin 尚不支持对顶级函数或属性的反射,但计划在未来支持。目前唯一支持的功能是让你获取给定 Java 反射对象对应的 Kotlin 反射对象,需要你事先使用 Java 反射:
kotlinFunction
returnskotlin.reflect.KFunction
实例由java.lang.reflect.Method
实例或java.lang.reflect.Constructor
实例kotlinProperty
returnskotlin.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)
...
}