Sök…
Anmärkningar
Precis som i Java har enumklasser i Kotlin syntetiska metoder som gör det möjligt att lista de definierade enumkonstanterna och få en enumkonstant med dess namn. Underteckningarna på dessa metoder är följande (förutsatt att namnet på enum-klassen är EnumClass
):
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
valueOf()
kastar en IllegalArgumentException
om det angivna namnet inte stämmer med någon av de enumkonstanter som definieras i klassen.
Varje enumkonstant har egenskaper för att få sitt namn och position i enumklassdeklarationen:
val name: String
val ordinal: Int
Enumkonstanterna implementerar också det jämförbara gränssnittet, där den naturliga ordningen är den ordning i vilken de definieras i enum-klassen.
initiering
Enumklasser som alla andra klasser kan ha en konstruktör och initialiseras
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
Funktioner och egenskaper i enums
Enum-klasser kan också deklarera medlemmar (dvs. egenskaper och funktioner). En semikolon ( ;
) måste placeras mellan det sista enum-objektet och den första medlemsdeklarationen.
Om en medlem är abstract
måste enumobjekten implementera den.
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)
}
Enkel enum
enum class Color {
RED, GREEN, BLUE
}
Varje enumkonstant är ett objekt. Enumkonstanter separeras med komma-tecken.
Föränderlighet
Enums kan vara muterbara, detta är ett annat sätt att få ett singletonbeteende:
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]