【发布时间】:2015-11-25 01:37:16
【问题描述】:
如何对包级函数、成员等使用反射?尝试访问javaClass 或class 无效,package 也无效。
【问题讨论】:
标签: reflection kotlin
如何对包级函数、成员等使用反射?尝试访问javaClass 或class 无效,package 也无效。
【问题讨论】:
标签: reflection kotlin
Kotlin 尚不支持对顶级函数或属性的反射,但计划在未来使用。目前支持的唯一功能是让您获取与给定 Java 反射对象对应的 Kotlin 反射对象,这需要您事先使用 Java 反射:
kotlinFunction 通过java.lang.reflect.Method 实例或java.lang.reflect.Constructor 实例返回kotlin.reflect.KFunction 实例kotlinProperty 通过 java.lang.reflect.Field 实例返回 kotlin.reflect.KProperty 实例要使用它们,必须先通过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)
...
}
【讨论】: