Ключевое слово enum

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

Синтаксис

kotlinenum class EnumName {
  VALUE1,
  VALUE2,
  VALUE3
}
kotlinenum class EnumName(val property: Type) {
  VALUE1(value1),
  VALUE2(value2),
  VALUE3(value3)
  
  fun method(): ReturnType {
    // method body
  }
}

Пример

Создадим простое перечисление дней недели:

kotlinenum class Day {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY
}

Использование перечисления:

kotlinval today: Day = Day.MONDAY
println(today)

Результат выполнения кода:

kotlinMONDAY

Пример

Перечисление с свойствами и конструктором:

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

Доступ к свойству перечисления:

kotlinval color: Color = Color.RED
println(color.rgb)

Результат выполнения кода:

kotlin16711680

Пример

Перечисление с методами:

kotlinenum class Operation {
  ADD {
    override fun apply(x: Double, y: Double): Double = x + y
  },
  SUBTRACT {
    override fun apply(x: Double, y: Double): Double = x - y
  },
  MULTIPLY {
    override fun apply(x: Double, y: Double): Double = x * y
  }
  
  abstract fun apply(x: Double, y: Double): Double
}

Использование методов перечисления:

kotlinval result: Double = Operation.ADD.apply(5.0, 3.0)
println(result)

Результат выполнения кода:

kotlinDouble 8.0

Пример

Получение всех значений перечисления:

kotlinenum class Direction {
  NORTH, SOUTH, EAST, WEST
}

val directions: Array<Direction> = Direction.values()
for (dir in directions) {
  println(dir)
}

Результат выполнения кода:

kotlinNORTH
SOUTH
EAST
WEST

Пример

Получение значения перечисления по имени:

kotlinenum class Status {
  ACTIVE, INACTIVE, PENDING
}

val status: Status = Status.valueOf("ACTIVE")
println(status)

Результат выполнения кода:

kotlinACTIVE

Смотрите также

  • ключевое слово class,
    которое используется для объявления классов
  • ключевое слово abstract,
    которое используется для объявления абстрактных классов и методов
  • ключевое слово sealed,
    которое используется для объявления sealed классов
  • ключевое слово data,
    которое используется для объявления data классов