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

如何让Kotlin枚举直接作为String类型使用?

解决方法

你不需要自定义额外的字段,Kotlin枚举本身就提供了name属性,值就是枚举常量的字符串名称,直接用它就能省去.v的步骤:

enum class Things{ FIRST, SECOND, THIRD }

// 直接调用name属性
containsThings[Things.FIRST.name]

如果觉得name这个名称太长,还可以给枚举类加个扩展属性简化调用:

enum class Things{ FIRST, SECOND, THIRD }

// 定义扩展属性,名称可以随便取,比如用v或者s
val Things.v get() = name

// 使用时和你原来的写法一致,但不用在枚举里重复定义字符串值
containsThings[Things.FIRST.v]

要是你想让枚举实例能直接当作String用(不用加任何后缀),因为String是final类无法被继承,只能通过隐式转换实现,但这种方式会降低代码可读性,不推荐:

enum class Things{ FIRST, SECOND, THIRD }

// 定义隐式转换函数
operator fun Things.unaryPlus(): String = this.name

// 使用时加个+符号
containsThings[+Things.FIRST]

另外,如果你的容器(比如containsThings)接受CharSequence类型的key,还可以让枚举实现CharSequence接口,直接传入枚举实例:

enum class Things : CharSequence {
    FIRST, SECOND, THIRD;

    override val length: Int get() = name.length
    override fun get(index: Int): Char = name[index]
    override fun subSequence(startIndex: Int, endIndex: Int): CharSequence = name.subSequence(startIndex, endIndex)
    override fun toString(): String = name
}

// 当Map的key是CharSequence时直接用
containsThings[Things.FIRST]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:07:35