Generics 在kotlin中,如何使用枚举中的键创建映射的类

Generics 在kotlin中,如何使用枚举中的键创建映射的类,generics,kotlin,enums,Generics,Kotlin,Enums,或者换句话说,如何在我的类中构造内部EnumMap,其中EnumMap键类型由调用方选择的Enum设置 我希望有这样的代码: enum MY_FLAGS { FLAG1, FLAG2, FLAG3 } val myProfiler = Profiler<MY_FLAGS>() myProfiler.profile(FLAG1) { longRunningOperation() // the time to execute longRunningOperation //

或者换句话说,如何在我的类中构造内部EnumMap,其中EnumMap键类型由调用方选择的Enum设置

我希望有这样的代码:

enum MY_FLAGS { FLAG1, FLAG2, FLAG3 }
val myProfiler = Profiler<MY_FLAGS>()
myProfiler.profile(FLAG1) {
  longRunningOperation() 
  // the time to execute longRunningOperation 
  // is accumulated in myProfiler's EnumMap.
}
enum MY_FLAGS{FLAG1,FLAG2,FLAG3}
val myProfiler=Profiler()
myProfiler.profile(FLAG1){
龙润宁操作()
//执行longRunningOperation的时间
//在myProfiler的EnumMap中累积。
}
我有一个类,跟踪各种计数器。这些计数器键始终来自同一枚举类。所以我想构造计数器类实例来处理特定的枚举

到目前为止,我有
类探查器(private val clazz:E){
,它感觉非常接近,但不完全接近,因为当我尝试使用探查器类函数增加一个计数器时,我不能完全使用E

例如,如果TempEnum没有硬编码到以下内容中:

val enumMap = EnumMap<TempEnum, MutableList<TimeDuration>>(TempEnum::class.java).apply {
  putAll(TempEnum.values().map {
    it to mutableListOf<TimeDuration>()
  })
}
val enumMap=enumMap(TempEnum::class.java)。应用{
putAll(TempEnum.values().map{
将其添加到mutableListOf()中
})
}

然后编译开始抱怨in-vs-out-vs-invariant,这就是我变得模糊的地方。

要构造一个可以将泛型
枚举作为类型参数的类,可以执行以下操作:

class Profiler<E : Enum<*>> {
   val counter = mutableMapOf<E, Int>()

   fun profile(key: E, block: (E) -> Unit) {
        block(key)
        // increase counter
    }
}

要构造一个可以将泛型
Enum
作为类型参数的类,可以执行以下操作:

class Profiler<E : Enum<*>> {
   val counter = mutableMapOf<E, Int>()

   fun profile(key: E, block: (E) -> Unit) {
        block(key)
        // increase counter
    }
}

class Profiler
”(或更简单的
class Profiler)
这没有多大意义。为什么类型参数只有一个可能的值?只需删除类型参数并使用
MyFlags
!我不太明白如何使用EnumMap:
class Profiler(clazz:E){val counter=EnumMap(clazz)
class Profiler
”(或更简单的
class Profiler)
这没有多大意义。为什么类型参数只有一个可能的值?只需删除类型参数并使用
MyFlags
!我不太明白如何使用EnumMap:
class Profiler(clazz:E){val counter=EnumMap(clazz)
class Profiler<E : Enum<MyFlags>> {