科特林:我怎样才能在包上使用反射

  • 本文关键字:反射 reflection kotlin
  • 更新时间 :
  • 英文 :


如何对包级别的函数、成员等使用反射。?尝试访问javaClassclass无效,package也无效。

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)
    ...
}

相关内容

  • 没有找到相关文章

最新更新