Kotlin:我怎样才能在包装上使用反射?

时间:2015-11-25 01:37:16

标签: reflection kotlin

如何在包级功能,成员等上使用反射?尝试访问substr($string, strlen($string) - 2, 2)javaClass不起作用,class也不起作用。

1 个答案:

答案 0 :(得分:7)

Kotlin尚不支持对顶级功能或属性的反思,但计划在未来使用。目前支持的唯一功能允许您获取与给定Java反射对象相对应的Kotlin反射对象,要求您事先使用Java反射:

  • kotlinFunction通过kotlin.reflect.KFunction实例或java.lang.reflect.Method实例
  • 返回java.lang.reflect.Constructor个实例
  • kotlinProperty通过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)
    ...
}