【问题标题】:Kotlin: How can I use reflection on packages?Kotlin:如何在包上使用反射?
【发布时间】:2015-11-25 01:37:16
【问题描述】:

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

【问题讨论】:

    标签: reflection kotlin


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多