TGViewer
Kotlin Developer Kotlin Developer @kotlinsenior · 6.22K subscribers
Post #1326 335
❓Что такое enum класс (перечислений) в Kotlin

Если в процессе разработки возникает ситуация, когда переменная должна иметь определённые (заранее известные) значения — константы, то вместо того, чтобы плодить список констант, их все можно перечислить в классе, который был придуман специально для этого — enum (класс перечислений).

Он позволяет создать набор значений, которые могут быть использованы как единственно допустимые значения переменной. Каждая константа в классе перечислений является экземпляром этого класса и отделяется от другой константы запятой.

enum class ColorType {
RED,
BLUE,
GREEN
}


Чтобы ограничить переменную одним из значений класса перечислений, нужно назначить ей тип объявленного класса перечислений.

var color: ColorType
color = ColorType.RED


Помимо самих констант в класс перечислений можно добавить свойства и функции. Их необходимо отделять от констант точкой с запятой. Это единственное место в Kotlin, где используется точка с запятой.

enum class ColorType {
RED,
BLUE,
GREEN;

fun names() = "Красный, Голубой, Зелёный"
val rgb = "0xFFFFFF"
}


При этом каждая константа сможет обращаться к этому свойству или функции.

var color: ColorType = ColorType.RED
println(color.names()) // выведет "Красный, Голубой, Зелёный"
println(color.rgb) // выведет "0xFFFFFF"


Классы перечислений как и обычные классы также могут иметь конструктор. Так как константы являются экземплярами enum-класса, они могут быть инициализированы.

enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}


Enum-константы также могут объявлять свои собственные анонимные классы как с их собственными методами, так и с перегруженными методами базового класса. Напоминаю, что при объявлении в enum-классе каких-либо членов, необходимо отделять их от объявления констант точкой с запятой.

enum class ProtocolState {
WAITING {
override fun signal() = TALKING
},

TALKING {
override fun signal() = WAITING
};

abstract fun signal(): ProtocolState
}


@KotlinSenior #kotlin
More from @kotlinsenior
  1. Oct 9, 2026Post #1325
  2. Oct 8, 2026Разработчик больше не обязан выполнять каждую задачу вручную. Но сможет ли ИИ-агент действ…
  3. Oct 8, 2026❓ Как работают SAM-conversions Single Abstract Method (SAM) интерфейсы — это интерфейсы то…
  4. Oct 7, 2026Post #1322
  5. Oct 7, 2026❓ Чем Any в Kotlin отличается от Object в Java Any не является полным аналогом java.lang.O…
  6. Oct 7, 2026Vibrance — естественное смешивание цветов Vibrance — естественное смешивание цветов для Ko…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →