Kotlin - 通过反射获取静态函数

Kotlin - Get static functions with reflection

我正在使用这段代码将 Java class 的所有静态函数映射到 stuff:

fun staticsFromClass(clazz: Class<*>): List<Something> = clazz.methods
        .filter { method -> Modifier.isStatic(method.modifiers) }
        .map { method ->
           //something
        }

但我发现它只适用于 Java 代码。它过滤掉伴生对象函数和单例对象函数。我该如何解决?

实际上,此代码适用于 Kotlin classes,但通常 Kotlin 没有任何静态成员。您可以使用以下代码获取伙伴成员:

fun companionMembersFromClass(clazz: KClass<*>): List<Something> {
    val members = clazz.companionObject?.members ?: emptyList()
    ...
}

同样,您可以通过以下方式获取同伴的实例:clazz.companionObjectInstance

或者,您可以直接引用同伴 class,例如:MyClass.Companion::class,然后列出其非静态成员。