如何在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说话(函数(对吗?(。

那么我如何声明这些功能,以使它们既静态又可以通过反射?

如果用@JvmStaticobject中声明的函数,则将它们编译为静态Java方法。

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

Class.forName("your.package.CommandsKt")将起作用(它返回java.lang.Class,而不是KClass;我不确定在其上调用.kotlin是否会起作用(。

最新更新