You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin/JS中如何实现判断reified泛型类型T是否为枚举类的函数

Kotlin/JS 实现枚举类判断方案

原代码错误原因

你编写的代码存在逻辑错误:KClass.isInstance()的作用是判断传入参数是否为当前类的实例,你将Enum类本身作为参数传入判断,逻辑完全倒置,因此永远返回false。
另外Kotlin/JS默认没有携带全量KClass反射元数据,直接照搬JVM端的T::class.isEnum写法也无法直接生效。

可行实现方案

方案1:轻量无反射实现(推荐)

直接利用Kotlin/JS编译生成的内置元数据判断,不需要引入额外依赖,不会增加包体积:

inline fun <reified T : Any> isEnum(): Boolean {
    // 直接读取Kotlin编译到JS后附加的类元数据标记
    return js("T?.\$metadata$?.kind === 'enum_class'") as Boolean
}

调用测试完全符合预期:isEnum<String>()返回false、isEnum<MyObject>()返回false、isEnum<MyEnum>()返回true。

方案2:全量反射实现

如果项目已经引入了kotlin-reflect-js全量反射库,可以直接使用标准反射API:

import kotlin.reflect.full.isEnum

inline fun <reified T : Any> isEnum(): Boolean = T::class.isEnum

注意该方案需要引入全量反射依赖,会增加最终打包的JS体积。

内容的提问来源于stack exchange,提问作者vonox7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:24:04