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
,然后列出其非静态成员。
我正在使用这段代码将 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
,然后列出其非静态成员。