Kotlin
Enumerar
Buscar..
Observaciones
Al igual que en Java, las clases de enumeración en Kotlin tienen métodos sintéticos que permiten enumerar las constantes de enumeración definidas y obtener una constante de enumeración por su nombre. Las firmas de estos métodos son las siguientes (asumiendo que el nombre de la clase enum es EnumClass
):
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
El método valueOf()
lanza una IllegalArgumentException
si el nombre especificado no coincide con ninguna de las constantes de enumeración definidas en la clase.
Cada constante de enumeración tiene propiedades para obtener su nombre y posición en la declaración de clase de enumeración:
val name: String
val ordinal: Int
Las constantes de enumeración también implementan la interfaz Comparable, siendo el orden natural el orden en el que se definen en la clase enum.
Inicialización
Enumerar clases como cualquier otra clase puede tener un constructor y ser inicializado
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
Funciones y propiedades en enumeraciones
Las clases de enumeración también pueden declarar miembros (es decir, propiedades y funciones). Se debe colocar un punto y coma ( ;
) entre el último objeto de enumeración y la primera declaración del miembro.
Si un miembro es abstract
, los objetos enumerados deben implementarlo.
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)
}
Enumeración simple
enum class Color {
RED, GREEN, BLUE
}
Cada enum constante es un objeto. Las constantes enum están separadas por comas.
Mutabilidad
Las enumeraciones pueden ser mutables, esta es otra forma de obtener un comportamiento 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]