Lavorare con gli enum a Kotlin

1. Panoramica

In questo tutorial, approfondiremo le enumerazioni Kotlin.

Con l'evoluzione dei linguaggi di programmazione, anche l'uso e l'applicazione delle enumerazioni sono progrediti.

Le costanti Enum oggi non sono solo semplici raccolte di costanti : possono avere proprietà, implementare interfacce e molto altro.

Per i principianti di Kotlin, controlla questo articolo sulle basi di Kotlin - Introduzione al linguaggio Kotlin.

2. Enumerazioni Kotlin di base

Diamo un'occhiata alle basi delle enumerazioni in Kotlin.

2.1. Definizione di enumerazioni

Definiamo un enum come se avesse tre costanti che descrivono i tipi di carta di credito:

enum class CardType { SILVER, GOLD, PLATINUM }

2.2. Inizializzazione delle costanti Enum

Gli enum in Kotlin, proprio come in Java, possono avere un costruttore. Poiché le costanti enum sono istanze di una classe Enum , le costanti possono essere inizializzate passando valori specifici al costruttore.

Specifichiamo i valori di colore per vari tipi di carte:

enum class CardType(val color: String) { SILVER("gray"), GOLD("yellow"), PLATINUM("black") }

Possiamo accedere al valore del colore di un tipo di carta specifico con:

val color = CardType.SILVER.color

3. Costanti Enum come classi anonime

Possiamo definire un comportamento costante enum specifico creandole come classi anonime. Le costanti devono quindi sovrascrivere le funzioni astratte definite nella definizione Enum .

Ad esempio, per ogni tipo di carta, potremmo avere un diverso calcolo del rimborso.

Vediamo come possiamo implementarlo:

enum class CardType { SILVER { override fun calculateCashbackPercent() = 0.25f }, GOLD { override fun calculateCashbackPercent() = 0.5f }, PLATINUM { override fun calculateCashbackPercent() = 0.75f }; abstract fun calculateCashbackPercent(): Float }

Possiamo invocare i metodi sovrascritti delle classi costanti anonime con:

val cashbackPercent = CardType.SILVER.calculateCashbackPercent()

4. Enum Implementing Interfaces

Supponiamo che ci sia un'interfaccia ICardLimit che definisce i limiti delle carte di vari tipi di carte:

interface ICardLimit { fun getCreditLimit(): Int }

Ora vediamo come la nostra enum può implementare questa interfaccia:

enum class CardType : ICardLimit { SILVER { override fun getCreditLimit() = 100000 }, GOLD { override fun getCreditLimit() = 200000 }, PLATINUM { override fun getCreditLimit() = 300000 } }

Per accedere al limite di credito di un tipo di carta, possiamo utilizzare lo stesso approccio dell'esempio precedente:

val creditLimit = CardType.PLATINUM.getCreditLimit()

5. Costrutti Enum comuni

5.1. Ottenere le costanti Enum per nome

Per ottenere una costante enum dal suo nome String , usiamo la funzione statica valueOf () :

val cardType = CardType.valueOf(name.toUpperCase())

5.2. Iterazione attraverso le costanti Enum

Per iterare tutte le costanti enum, usiamo la funzione statica values ​​() :

for (cardType in CardType.values()) { println(cardType.color) }

5.3. Metodi statici

Per aggiungere una funzione "statica" a un'enumerazione, possiamo utilizzare un oggetto associato :

companion object { fun getCardTypeByName(name: String) = valueOf(name.toUpperCase()) }

Ora possiamo richiamare questa funzione con:

val cardType = CardType.getCardTypeByName("SILVER")

Nota che Kotlin non ha un concetto di metodi statici . Quello che abbiamo mostrato qui è un modo per ottenere la stessa funzionalità di Java, ma utilizzando le funzionalità di Kotlin.

6. Conclusione

Questo articolo fa un'introduzione alle enumerazioni nel linguaggio Kotlin e alle sue caratteristiche chiave.

Abbiamo introdotto alcuni concetti semplici come la definizione di enumerazioni e l'inizializzazione delle costanti. Abbiamo anche mostrato alcune funzionalità avanzate come la definizione di costanti enum come classi anonime e le interfacce di implementazione enum.

L'implementazione di tutti questi esempi e frammenti di codice può essere trovata nel progetto GitHub. Questo è un progetto Maven, quindi dovrebbe essere facile da importare ed eseguire così com'è.