Generics 在kotlin中,如何使用枚举中的键创建映射的类
或者换句话说,如何在我的类中构造内部EnumMap,其中EnumMap键类型由调用方选择的Enum设置 我希望有这样的代码: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 //
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>> {