【发布时间】:2019-10-09 14:26:06
【问题描述】:
需要调用一个接受Map<String, String>的api
fun api.log(map: Map<string, String>
但密钥只能来自已注册的密钥,因此为已注册的密钥定义了一个枚举:
enum class RegisteredKey {
NONE, ZOOM
}
并首先构建 EnumMap 以强制执行键类型:
var enumParamMap: EnumMap<RegisteredKey, String> = EnumMap<RegisteredKey, String>(RegisteredKey::class.java)
enumParamMap.put(RegisteredKeys.NONE, "0")
enumParamMap.put(RegisteredKeys.ZOOM, "1")
doLog(enumParamMap)
问题一,有没有构造函数可以直接用数据构建enumMap?
然后需要将 EnumMap 转换为 Map 以便 api.log() 接受它
fun doLog(enumParamMap: EnumMap<RegisteredKey, String>) {
val map: MutableMap<String, String> = mutableMapOf()
for (enum in enumParamMap.entries) {
map.put(enum.key.name, enum.value)
}
api.log(map)
}
问题 2:有没有更简单的方法将 enumMap 映射到常规映射?
【问题讨论】:
-
您的问题 2 具有误导性,因为您不仅想要“常规地图”,而且想要具有与原始地图不同的参数的地图(您希望密钥的类型为 String 而不是 RegisteredKey) .