我想定义一个扩展,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)) }
}