Szukaj…


Uwagi

Podobnie jak w Javie, klasy wyliczeniowe w Kotlinie mają syntetyczne metody pozwalające wyświetlić listę zdefiniowanych stałych wyliczeniowych i uzyskać stałą wyliczeniową według jej nazwy. Sygnatury tych metod są następujące (zakładając, że nazwą klasy enum jest EnumClass ):

EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>

Metoda valueOf() zgłasza IllegalArgumentException jeśli podana nazwa nie pasuje do żadnej ze stałych wyliczeniowych zdefiniowanych w klasie.

Każda stała enum ma właściwości pozwalające uzyskać jej nazwę i pozycję w deklaracji klasy enum:

val name: String
val ordinal: Int

Stałe enum implementują również interfejs porównywalny, przy czym porządek naturalny jest porządkiem, w którym są zdefiniowane w klasie enum.

Inicjalizacja

Klasy Enum, podobnie jak inne klasy, mogą mieć konstruktor i być inicjowane

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

Funkcje i właściwości w wyliczeniach

Klasy wyliczeniowe mogą również deklarować członków (tj. Właściwości i funkcje). Średnik ( ; ) należy umieścić między ostatnim obiektem enum a deklaracją pierwszego elementu.

Jeśli element członkowski jest abstract , obiekty enum muszą go zaimplementować.

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

    ;

    abstract val rgb: Int

    fun colorString() = "#%06X".format(0xFFFFFF and rgb)
}

Proste wyliczanie

enum class Color {
  RED, GREEN, BLUE
}

Każda stała wyliczeniowa jest obiektem. Stałe enum są oddzielone przecinkami.

Zmienność

Wyliczenia mogą być zmienne, jest to kolejny sposób na uzyskanie zachowania singleton:

enum class Planet(var population: Int = 0) {
    EARTH(7 * 100000000),
    MARS();

    override fun toString() = "$name[population=$population]"
}

 println(Planet.MARS) // MARS[population=0]
 Planet.MARS.population = 3
 println(Planet.MARS) // MARS[population=3]


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow