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]