Kotlin:我如何使用包装上的反射?
我如何使用包级函数,成员等的思考? 尝试访问javaClass
或class
不起作用, package
也没有。
Kotlin尚未支持对顶级功能或属性的反思,但计划在未来进行。 目前唯一支持的功能允许您获取与给定Java反射对象相对应的Kotlin反射对象,因此需要事先使用Java反射:
-
kotlinFunction
通过java.lang.reflect.Method
实例或java.lang.reflect.Method
实例返回一个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) ... }