How to define a non-ordinal enum in Kotlin?

KotlinEnums

Kotlin Problem Overview


I want to define an enum that values are not ordinal, for example:

enum class States(value: Int) {
    STATE_A(4),
    STATE_B(5),
    STATE_C(7),
    STATE_D(12)
}

How can I get the value of each item? For instance States.STATE_C should return 7.

Kotlin Solutions


Solution 1 - Kotlin

You should define value as property (val) not as constructor parameter. After that it becomes accessible:

enum class States(val value: Int) {
    STATE_A(1),
    STATE_B(2),
    STATE_C(3),
    STATE_D(4)
}
...
println(States.STATE_C.value) // prints 3

Also consider to use ordinal, which may be suitable in your case:

enum class States {
    STATE_A,
    STATE_B,
    STATE_C,
    STATE_D
}
...
println(States.STATE_C.ordinal + 1) // prints 3

If you go with that approach, be careful - any change of States order can break your code.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHamedView Question on Stackoverflow
Solution 1 - KotlinhluhovskyiView Answer on Stackoverflow