【发布时间】:2021-11-25 21:38:51
【问题描述】:
我有一个枚举类:
enum class E { A, B, C, D }
初始化包含 E 的所有值作为键的 EnumMap 的最简洁方法是什么,每个键的初始值都为 0?
val map = ...?
assert(map is EnumMap<E, Int>)
assert(map[E.A] == 0)
assert(map[E.B] == 0)
assert(map[E.C] == 0)
assert(map[E.D] == 0)
我能想到的最简洁的是:
val map = E.values().associateWithTo(EnumMap(E::class.java)) { 0 }
但是,E 名称的重复违反了 DRY 原则。而associateWithTo这个词有点拗口。有没有更简洁易读的方式?我希望有像 EnumMap.allOf() 这样的东西,就像有 EnumSet.allOf() 一样。
【问题讨论】:
-
你真的需要
EnumMap吗?Map还不够吗? -
这张地图每秒会被使用数十万次。 enumMap 将等效于数组索引。其他映射效率较低:hashmap 会查找枚举值的哈希码并转到包含链表的表。