在运行时,我正在尝试验证特定的NSBundle
是否为枚举类型。
最好的方法是什么?可以在不依赖特定运行时(例如JVM或JS)的情况下完成此操作吗?
KClass<out Any>
答案 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)
}