如何在 Kotlin 中检查类型是否是枚举?

Ste*_*ris 5 reflection kotlin

在运行时,我试图验证一个特定的KClass<out Any>是否是枚举类型。

这样做的最佳方法是什么?这是否可以在不依赖特定运行时(例如,JVM 或 JS)的情况下完成?

fun isEnum( type: KClass<out Any> ): Boolean
{
    ... ?
}
Run Code Online (Sandbox Code Playgroud)

zsm*_*b13 7

也是一个仅限 JVM 的解决方案,但更短,使用isSubClassOf

fun isEnum(type: KClass<out Any>) = type.isSubclassOf(Enum::class)
Run Code Online (Sandbox Code Playgroud)


Ste*_*ris 0

以下内容似乎适用于 JVM,依赖于限定类型名称。

fun isEnum( type: Kclass<out Any> ): Boolean
{
    return type.supertypes.any { t ->
        (t.classifier as KClass<out Any>).qualifiedName == "kotlin.Enum" }
}
Run Code Online (Sandbox Code Playgroud)

然而,这不适用于 JS,因为KClass::supertypes它不适用于该运行时。