Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktOpEsEM 76 of 123 menu
◀ ▶

Методы enum в Kotlin

В теле enum class можно объявлять функции, общие для всех констант. Они вызываются у конкретной константы через точку:

enum class Direction { NORTH, EAST, SOUTH, WEST; fun opposite(): Direction = when (this) { NORTH -> SOUTH SOUTH -> NORTH EAST -> WEST WEST -> EAST } } fun main() { println(Direction.NORTH.opposite()) }

Если поведение у констант разное, у отдельной константы можно задать собственное тело в фигурных скобках и переопределить абстрактный метод enum - по той же схеме, что абстрактный метод у наследника абстрактного класса:

enum class Operation { ADD { override fun apply(a: Int, b: Int) = a + b }, SUB { override fun apply(a: Int, b: Int) = a - b }, MUL { override fun apply(a: Int, b: Int) = a * b }; abstract fun apply(a: Int, b: Int): Int } fun main() { println(Operation.MUL.apply(6, 7)) }

Точка с запятой после последней константы отделяет список значений от объявлений методов и полей в теле enum. Без нее компилятор воспримет следующую строку как еще одну константу:

enum class Priority(val level: Int) { LOW(1), HIGH(3); fun isUrgent(): Boolean = level >= 3 } fun main() { println(Priority.HIGH.isUrgent()) }

Объявите enum class FileKind с константами TEXT, IMAGE, ARCHIVE. Добавьте метод label(): String: для TEXT верните "text file", для IMAGE - "image file", для ARCHIVE - "archive". Выведите результат для FileKind.IMAGE.

Объявите enum class Sign с константами PLUS и MINUS и абстрактным методом apply(value: Int): Int. Для PLUS прибавьте 1, для MINUS вычтите 1. Выведите результат Sign.PLUS.apply(10).

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить