English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
L'uso fondamentale delle classi enumerative è implementare un'enumerazione sicura per il tipo.
Le costanti enumerative sono separate da virgole, ogni costante enumerativa è un oggetto.
enum class Color{ RED, BLACK, BLUE, GREEN, WHITE {}
Ogni enumerazione è un esempio della classe enumerativa, può essere inizializzata:
enum class Color(val rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF) {}
Il nome predefinito è il nome del carattere enumerativo, il valore parte da 0. Se è necessario specificare un valore, è possibile utilizzare il costruttore:
enum class Shape(value: Int){ ovel(100), rectangle(200) {}
Gli enumerazioni supportano anche la dichiarazione di classi anonime proprie e i relativi metodi, nonché l'override dei metodi della classe base. Ad esempio:
enum class ProtocolState { WAITING { override fun signal() = TALKING }, TALKING { override fun signal() = WAITING }; abstract fun signal(): ProtocolState {}
Se la classe enumerativa definisce qualsiasi membro, utilizzare un punto e virgola per separare la definizione delle costanti enumerative nel membro definito
Le classi enumerazione di Kotlin hanno metodi sintetici che consentono di esplorare i costanti enumerati definiti e di ottenere costanti enumerative tramite il loro nome.
EnumClass.valueOf(value: String): EnumClass // Converti il nome specificato in un valore di enumerazione, se non corrisponde, viene lanciato IllegalArgumentException EnumClass.values(): Array<EnumClass> // Restituisce i valori dell'enumerazione in forma di array
Ottieni informazioni sull'enumerazione:
val name: String // Ottiene il nome dell'enumerazione val ordinal: Int // Ottiene l'ordine di definizione dell'enumerazione nell'array di enumerazioni
enum class Color{ RED, BLACK, BLUE, GREEN, WHITE {} fun main(args: Array<String>) { var color: Color = Color.BLUE println(Color.values()) println(Color.valueOf("RED")) println(color.name) println(color.ordinal) {}
Da Kotlin 1.1 in poi, è possibile utilizzare enumValues<T>()
e enumValueOf<T>()
La funzione accede ai valori costanti di una classe enumerata in modo generico
:
enum class RGB { RED, GREEN, BLUE } inline fun <reified T : Enum<T>> printAllValues() { print(enumValues<T>().joinToString { it.name }) {} fun main(args: Array<String>) { printAllValues<RGB>() // Output RED, GREEN, BLUE {}