我想声明一组不是类的成员函数(即"静态"函数,而无需引用类实例(。必须以某种方式宣布它们,以便我可以在运行时使用反射对其进行迭代。
我的第一次尝试是这样写一个文件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说话(函数(对吗?(。
那么我如何声明这些功能,以使它们既静态又可以通过反射?
如果用@JvmStatic
在object
中声明的函数,则将它们编译为静态Java方法。
我似乎无法在Kotlin中引用该类
Class.forName("your.package.CommandsKt")
将起作用(它返回java.lang.Class
,而不是KClass
;我不确定在其上调用.kotlin
是否会起作用(。