如何在Kotlin中定义非常规枚举?


78

我想定义一个值不是序数的枚举,例如:

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

我如何获得每个物品的价值?例如,States.STATE_C应该返回7


为什么不从0开始?
拉斐尔C

3
您需要从0以外的其他场景开始
。– Hamed

Answers:


126

您应将其定义value为属性(val),而不应将其定义为构造函数参数。之后,它可以访问:

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

还可以考虑使用ordinal,这可能适合您的情况:

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

如果您采用这种方法,请小心-States顺序的任何更改都会破坏您的代码。


@hluhovskyi,您好,因此,从技术上讲,序数索引将基于1?
Armando Marques Sobrinho

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.