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]


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow