Kotlin Enum: методы и примеры работы с перечислениями

В Kotlin перечисление — это специальный тип, который позволяет вам определять набор именованных значений. Каждое значение в перечислении называется константой перечисления. Константы перечисления обычно используются для представления фиксированного числа возможностей, таких как дни недели или цвета.

Вот несколько распространенных методов, которые можно использовать с перечислениями Kotlin:

  1. values(): этот метод возвращает массив всех констант перечисления, определенных в классе перечисления. Вы можете использовать его для перебора всех возможных значений.
enum class DayOfWeek {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
fun main() {
    val days = DayOfWeek.values()
    for (day in days) {
        println(day)
    }
}

Выход:

MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
  1. valueOf(String): этот метод возвращает константу перечисления с указанным именем. Он генерирует исключение, если такой константы не существует.
enum class Color {
    RED, GREEN, BLUE
}
fun main() {
    val color = Color.valueOf("RED")
    println(color)
}

Выход:

RED
  1. name: это свойство возвращает имя перечислимой константы в виде строки.
enum class Direction {
    NORTH, SOUTH, EAST, WEST
}
fun main() {
    val direction = Direction.NORTH
    println(direction.name)
}

Выход:

NORTH
  1. ordinal: это свойство возвращает порядковый номер константы перечисления, который представляет собой ее позицию в объявлении перечисления, начиная с нуля.
enum class Size {
    SMALL, MEDIUM, LARGE
}
fun main() {
    val size = Size.MEDIUM
    println(size.ordinal)
}

Выход:

1
  1. Пользовательские методы: вы можете определить свои собственные методы в перечислении для выполнения определенных операций на основе константы перечисления.
enum class Operation {
    ADD {
        override fun perform(a: Int, b: Int): Int {
            return a + b
        }
    },
    SUBTRACT {
        override fun perform(a: Int, b: Int): Int {
            return a - b
        }
    },
    MULTIPLY {
        override fun perform(a: Int, b: Int): Int {
            return a * b
        }
    };
    abstract fun perform(a: Int, b: Int): Int
}
fun main() {
    val operation = Operation.ADD
    val result = operation.perform(2, 3)
    println(result)
}

Выход:

5