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

Kotlin中如何用枚举所有值为键初始化带默认值的EnumMap

解决方案

方案1:自定义扩展函数(最符合需求,一劳永逸)

这是最贴近你期望的EnumMap.allOf()使用体验的方案,只要预先定义一次泛型扩展函数,后续所有枚举类都可以直接调用,完全符合DRY原则:
首先定义通用工具函数,一次编写全项目可用:

import java.util.EnumMap

inline fun <reified E : Enum<E>, V> enumMapOfAll(defaultValue: V): EnumMap<E, V> {
    return enumValues<E>().associateWithTo(EnumMap(E::class.java)) { defaultValue }
}

使用时代码非常简洁,不需要重复声明枚举类相关逻辑:

val map = enumMapOfAll<E, Int>(0)

如果变量已经提前声明了类型,还可以进一步省略泛型参数:

val map: EnumMap<E, Int> = enumMapOfAll(0)

该写法完全满足你给出的所有断言条件,没有重复引用枚举名E,可读性和精简度都符合要求。

方案2:不使用扩展函数的原生精简写法

如果不想额外定义扩展,也可以用apply作用域函数优化原有写法,减少重复感:

val map = EnumMap(E::class.java).apply { E.values().forEach { put(it, 0) } }

不过该写法还是需要重复引用E,仅适合临时单次使用的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:24:01