Suche…


Bemerkungen

Genau wie in Java verfügen Enum-Klassen in Kotlin über synthetische Methoden, mit denen die definierten Enumenkonstanten aufgelistet und eine Enumenkonstante anhand ihres Namens abgerufen werden kann. Die Signaturen dieser Methoden lauten wie folgt (vorausgesetzt, der Name der EnumClass lautet EnumClass ):

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

Die Methode valueOf() IllegalArgumentException eine IllegalArgumentException wenn der angegebene Name mit keiner der in der Klasse definierten IllegalArgumentException übereinstimmt.

Jede Enumenkonstante verfügt über Eigenschaften, um ihren Namen und ihre Position in der Deklaration der Enumenklassen zu erhalten:

val name: String
val ordinal: Int

Die Enumenkonstanten implementieren auch die Comparable-Schnittstelle, wobei die natürliche Reihenfolge die Reihenfolge ist, in der sie in der Enumenklasse definiert werden.

Initialisierung

Aufzählungsklassen wie alle anderen Klassen können einen Konstruktor haben und können initialisiert werden

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

Funktionen und Eigenschaften in Enums

Aufzählungsklassen können auch Member deklarieren (dh Eigenschaften und Funktionen). Ein Semikolon ( ; ) muss zwischen dem letzten Enum-Objekt und der ersten Memberdeklaration stehen.

Wenn ein Member abstract , muss es von den Enum-Objekten implementiert werden.

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)
}

Einfache enum

enum class Color {
  RED, GREEN, BLUE
}

Jede Enumerationskonstante ist ein Objekt. Aufzählungskonstanten werden durch Kommas getrennt.

Wandlungsfähigkeit

Enumerationen können veränderlich sein. Dies ist eine weitere Möglichkeit, um ein Singleton-Verhalten zu erzielen:

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow