Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to define a non-ordinal enum in Kotlin?

Tags:

enums

kotlin

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.

like image 433
Hamed Avatar asked May 10 '18 06:05

Hamed


People also ask

What is ordinal in enum Kotlin?

Returns the ordinal of this enumeration constant (its position in its enum declaration, where the initial constant is assigned an ordinal of zero).

How do I get Kotlin enum value?

To get an enum constant by its string value, you can use the function valueOf() on the Enum class. It helps us to get enum from a String value in Kotlin.


1 Answers

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.

like image 76
hluhovskyi Avatar answered Sep 18 '22 15:09

hluhovskyi