Ricerca…


Osservazioni

Proprio come in Java, le classi enum di Kotlin hanno metodi sintetici che consentono di elencare le costanti enum definite e ottenere una costante enum con il suo nome. Le firme di questi metodi sono le seguenti (assumendo che il nome della classe enum sia EnumClass ):

EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>

Il metodo valueOf() genera un IllegalArgumentException se il nome specificato non corrisponde a nessuna delle costanti enum definite nella classe.

Ogni costante enum ha proprietà per ottenere il proprio nome e posizione nella dichiarazione della classe enum:

val name: String
val ordinal: Int

Le costanti enum implementano anche l'interfaccia Comparable, in cui l'ordine naturale è l'ordine in cui sono definiti nella classe enum.

Inizializzazione

Classi Enum come qualsiasi altra classe può avere un costruttore e essere inizializzata

enum class Color(val rgb: Int) {
    RED(0xFF0000),
    GREEN(0x00FF00),
    BLUE(0x0000FF)
}

Funzioni e proprietà nelle enumerazioni

Le classi Enum possono anche dichiarare membri (cioè proprietà e funzioni). Un punto e virgola ( ; ) deve essere inserito tra l'ultimo oggetto enum e la prima dichiarazione membro.

Se un membro è abstract , gli oggetti enum devono 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)
}

Enum semplice

enum class Color {
  RED, GREEN, BLUE
}

Ogni costante enum è un oggetto. Le costanti Enum sono separate da virgole.

Mutabilità

Le enumerazioni possono essere modificabili, questo è un altro modo per ottenere un comportamento 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow