Вы можете написать функцию с типом reified
, чтобы сделать это на любом Enum
. Когда у вас есть класс, вы можете сопоставить его enumContstants
с тем, что вам нравится (в данном случае Map<String,Int>
), или изменить его для печати, если хотите.
inline fun <reified T : Enum<*>> namesAndOrdinalsOf(): Map<String,Int> =
T::class.java.enumConstants.map {
it.name to it.ordinal
}.toMap()
Редактировать : я понятия не имел, что enumValues<T>()
существует (спасибо @Slaw), вы можете переписать его так, как это проще:
inline fun <reified T : Enum<T>> namesAndOrdinalsOf(): Map<String,Int> =
enumValues<T>().map {
it.name to it.ordinal
}.toMap()
И использовать его:
enum class Things {
Grapes,
Chairs,
Spectacles
}
fun main() {
println(namesAndOrdinalsOf<Things>())
}
// Prints: {Grapes=0, Chairs=1, Spectacles=2}