Или, другими словами, как создать внутреннюю 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. Поэтому я хотел бы создать экземпляр класса counter для обработки только этого конкретного Enum.
Пока у меня есть class Profiler<in E:Class<Enum<*>>>(private val clazz: E) {
, который кажется действительно близким , но не совсем, потому что, когда я пытаюсь увеличить один из счетчиков с помощью функции класса Profiler, я не могу использовать E !
Например, если бы TempEnum не был жестко закодирован в это:
val enumMap = EnumMap<TempEnum, MutableList<TimeDuration>>(TempEnum::class.java).apply {
putAll(TempEnum.values().map {
it to mutableListOf<TimeDuration>()
})
}
Затем компиляция начинает жаловаться на vs out vs invariant, из-за чего я становлюсь нечетким.