Recherche…
Remarques
Tout comme en Java, les classes enum dans Kotlin ont des méthodes synthétiques permettant de lister les constantes enum définies et d'obtenir une constante enum par son nom. Les signatures de ces méthodes sont les suivantes (en supposant que le nom de la classe enum est EnumClass
):
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
La méthode valueOf()
renvoie une IllegalArgumentException
si le nom spécifié ne correspond à aucune des constantes enum définies dans la classe.
Chaque constante enum a des propriétés pour obtenir son nom et sa position dans la déclaration de la classe enum:
val name: String
val ordinal: Int
Les constantes enum implémentent également l'interface Comparable, l'ordre naturel étant l'ordre dans lequel elles sont définies dans la classe enum.
Initialisation
Les classes Enum comme toutes les autres classes peuvent avoir un constructeur et être initialisées
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
Fonctions et propriétés dans les énumérations
Les classes Enum peuvent également déclarer des membres (propriétés et fonctions). Un point-virgule ( ;
) doit être placé entre le dernier objet enum et la déclaration du premier membre.
Si un membre est abstract
, les objets enum doivent l'implémenter.
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)
}
Énumération simple
enum class Color {
RED, GREEN, BLUE
}
Chaque constante d'énumération est un objet. Les constantes enum sont séparées par des virgules.
Mutabilité
Les énumérations peuvent être mutables, c'est une autre façon d'obtenir un comportement 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]