【发布时间】:2018-06-21 18:07:09
【问题描述】:
我想定义enum class 的扩展,它接受与枚举常量顺序相同的值列表并输出EnumMap。
我能够做的是创建和扩展List<V> 对象,并使用来自Enum<K>.values() 的键数组作为输入。
似乎困难在于enum class 本身并不是具有.values() 方法的对象。所以也许我的要求是不明智的。
这是一个使用列表扩展方法的工作示例。
import java.util.*
enum class Shoes(
val title: String,
val weight: Double) {
WORKBOOT("tough", 11.0),
SNEAKER("fast", 6.0),
SLIPPER("soft", 3.0);
}
fun main(args: Array<String>) {
val prices= listOf(11.5,8.2,3.5)
val map = prices.enumMapOf(Shoes.values())
map.print()
}
inline fun <reified K : Enum<K>, V> List<V>.enumMapOf(keys:Array<K>): EnumMap<K, V> {
val map = EnumMap<K, V>(K::class.java)
keys.forEachIndexed{i,k-> map[k]=this[i]}
return map
}
fun <K:Enum<K>,V> EnumMap<K,V>.print() {
this.forEach{k,v-> println("%d: %s --> %.2f".format(k.ordinal,k.name,v)) }
}
【问题讨论】:
标签: kotlin kotlin-extension enum-map