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]


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow