【问题标题】:Kotlin - Get static functions with reflectionKotlin - 使用反射获取静态函数
【发布时间】:2023-03-08 07:04:01
【问题描述】:

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

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

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

【问题讨论】:

  • 对于 Java,object 只是一个没有静态成员的常规类(除了 const vals 可能编译为静态字段,不确定)。

标签: kotlin reflection static-methods companion-object


【解决方案1】:

实际上,这段代码适用于 Kotlin 类,但通常 Kotlin 没有任何静态成员。您可以通过以下代码获取同伴成员:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多