English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Classe Enumerata in Kotlin

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
{}

Inizializzazione delle enumerazioni

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

Utilizzo delle costanti enumerative

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

Esempi online

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
{}