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]