Zostało mi jeszcze kilka poprawek do prezentacji na DevCrowd, a zatem tydzień wpisów krótkich trwa w najlepsze. Dziś jak wyglądają enumy w Kotlinie.

Typy wyliczeniowe, bo tak to się nazywa w cywilizowanym języku niecywilizowanych ludzi, pojawiły się w Jave 5 i oczywiście wprowadziły sporo zamieszania. W Kotlinie też są i to bardzo podobne.

Listing 1. Deklaracja

enum class Gender {
    MALE, FEMALE
}

To co rzuca się w oczy jest dodatkowe słówko class. Po co ono tam to ja nie mam pojęcia. Oczywiście podobnie jak w Javie możemy umieścić pola w enumie:

Listing 2. Deklaracja z polami

enum class ColorScheme(val background: String) {
    OPEN("#ffffff"),
    READONLY("#ff0000"),
    SECURED("#ffff00")
}

oraz metody. Zarówno abstrakcyjne jak i nieabstrakcyjne jak i oczywiście implementować interfejsy

Listing 3. Deklaracja z metodami

enum class ColorScheme(val background: String) : SecurityMarker {
    OPEN("#ffffff"){
        override fun mode(cell: Cell) {
            cell.isDisable = false
            cell.isVisible = true
        }
    },
    READONLY("#ff0000"){
        override fun mode(cell: Cell) {
            cell.isDisable = true
            cell.isVisible = true
        }
    },
    SECURED("#ffff00"){
        override fun mode(cell: Cell) {
            cell.isDisable = true
            cell.isVisible = false
        }
    };

    abstract fun mode(cell: Cell):Unit;

    fun color(cell: Labeled): Unit {
        cell.setTextFill(Color.web(background));
    }
}

Każdy enum posiada dodatkowo dwa pola name i ordinal reprezentujące nazwę i kolejność oraz metody valueOf oraz values, które pozwalają na pobieranie enuma ze stringa i zwracają wszystkie enumy.

Podsumowując, enumy w Kotlinie są bardzo, ale to bardzo podobne do tych z Javy. Praktycznie poza różnicami wynikającymi ze składni języka są identyczne.

ps. Kotlinem się bawię więc będzie dużo wpisów, ale nie mają one sensu jakiegoś tutoriala.