如何在Kotlin中声明一组可反射的函数?

时间:2018-03-27 14:10:07

标签: reflection kotlin

我想声明一组Kotlin函数,这些函数是类的成员函数(即“静态”函数,而不引用类实例)。它们必须以某种方式声明,以便我可以在运行时使用反射迭代它们。

我的第一次尝试是写一个文件Commands.kt,如下所示:

fun a(): Int = 42
fun b(): Int = 23

但是,我没有找到迭代这个文件中的函数的方法。我知道,对于Java兼容性,将生成一个包含这些函数作为静态方法的类CommandsKt。但是,我似乎无法在Kotlin中引用该类,也没有找到通过反射迭代Kotlin文件的所有实体的方法。

我的第二次尝试是使用一个对象:

object Commands {
    fun a(): Int = 42
    fun b(): Int = 23
}

我现在可以通过Commands::class.declaredMemberFunctions迭代成员函数。但是,这些函数仍然是成员函数,而不是“静态”(在Java中说)函数(对吧?)。

那么我如何声明这些函数以使它们都是静态的并且可以通过反射进行迭代?

2 个答案:

答案 0 :(得分:3)

如果使用object注释@JvmStatic中声明的函数,它们将被编译为静态Java方法。

答案 1 :(得分:1)

  

我似乎无法在Kotlin中引用该类

Class.forName("your.package.CommandsKt")会有效(它返回java.lang.Class,而不是KClass;我不确定是否可以调用.kotlin