Поиск…
замечания
Как и в Java, классы enum в Kotlin имеют синтетические методы, позволяющие перечислять определенные константы enum и получать константу enum по ее имени. Подписи этих методов следующие (при условии, что имя класса enum - EnumClass
):
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
Метод valueOf()
IllegalArgumentException
если указанное имя не соответствует ни одной из констант перечисления, определенных в классе.
Каждая константа перечисления имеет свойства для получения своего имени и позиции в объявлении класса enum:
val name: String
val ordinal: Int
Константы перечисления также реализуют интерфейс Comparable, при этом естественным порядком является порядок, в котором они определены в классе enum.
инициализация
Классы Enum, как и любые другие классы, могут иметь конструктор и быть инициализированы
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
Функции и свойства в перечислениях
Классы enum могут также объявлять члены (т. Е. Свойства и функции). Точка с запятой ( ;
) должна быть помещена между последним объектом перечисления и объявлением первого члена.
Если элемент является abstract
, объекты перечисления должны его реализовать.
enum class Color {
RED {
override val rgb: Int = 0xFF0000
},
GREEN {
override val rgb: Int = 0x00FF00
},
BLUE {
override val rgb: Int = 0x0000FF
}
;
abstract val rgb: Int
fun colorString() = "#%06X".format(0xFFFFFF and rgb)
}
Простой перечисление
enum class Color {
RED, GREEN, BLUE
}
Каждая константа перечисления является объектом. Константы континуума разделяются запятыми.
переменчивость
Перечисления могут быть изменчивыми, это еще один способ получить одноэлементное поведение:
enum class Planet(var population: Int = 0) {
EARTH(7 * 100000000),
MARS();
override fun toString() = "$name[population=$population]"
}
println(Planet.MARS) // MARS[population=0]
Planet.MARS.population = 3
println(Planet.MARS) // MARS[population=3]