2
我寫了一個Kotlin擴展,它爲枚舉值添加next()
。但是有沒有更好的方法來做到這一點?Kotlin擴展爲下一個枚舉值沒有反射
fun <T : Enum<*>> T.next(): T {
val values = this::class.java.getEnumConstants()
return if (this.ordinal < values.size - 1)
values[this.ordinal + 1]
else
values[0]
}
enum class Color {Red, Yellow, Green}
Color.Red.next() //Yellow
- 我能做到,沒有思考?
- 如果沒有,如何用Kotlins反射做到這一點?
該想法是從枚舉值迭代到下一個。但僅限於特定的值,不適用於整個枚舉values()
列表。我想阻止的事情就是把下面的添加到每個枚舉類型:
fun next() = if (this.ordinal == Color.values().size - 1)
Color.values()[0]
else
Color.values()[this.ordinal + 1]