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

时间:2018-07-02 14:09:30

标签: reflection kotlin

在运行时,我正在尝试验证特定的NSBundle是否为枚举类型。

最好的方法是什么?可以在不依赖特定运行时(例如JVM或JS)的情况下完成此操作吗?

KClass<out Any>

4 个答案:

答案 0 :(得分:2)

这也是一种仅使用JVM的解决方案,但使用isSubClassOf的解决方案较短:

fun isEnum(type: KClass<out Any>) = type.isSubclassOf(Enum::class)

答案 1 :(得分:0)

以下内容似乎有效,这取决于限定的类型名称。

fun isEnum( type: KClass<out Any> ): Boolean
{
    ... ?
}

但是,我尚未验证这是否同样适用于JS,但我相信。

答案 2 :(得分:0)

特定于JVM

这里没有一个对我有用的解决方案(我有一个KType),所以我想出了另一种方法。这是将KClass转换为KType然后检查KType是否为枚举的解决方案。

fun isEnum(kClass: KClass<out Any> ): Boolean {
    val kType :KType = kClass::class.createType()
    return (kType.javaType  as Class<*>).isEnum
}

答案 3 :(得分:0)

聚会有点晚,但如果您想检查 Any 对象是否是 Enum,您可以使用扩展函数来完成。如果您不想获得课程等,这会使您的代码更清晰。

fun Any?.isEnum(): Boolean {
    return this != null && this::class.isSubclassOf(Enum::class)
}