Werken met Enums in Kotlin

1. Overzicht

In deze tutorial gaan we dieper in op Kotlin-enums.

Met de evolutie van programmeertalen zijn ook het gebruik en de toepassing van enums gevorderd.

Enum-constanten zijn tegenwoordig niet alleen maar verzamelingen van constanten - ze kunnen eigenschappen hebben, interfaces implementeren en nog veel meer.

Lees voor Kotlin-beginners dit artikel over de basisprincipes van Kotlin - Inleiding tot de Kotlin-taal.

2. Basis Kotlin Enums

Laten we eens kijken naar de basisprincipes van enums in Kotlin.

2.1. Enums definiëren

Laten we een opsomming definiëren met drie constanten die creditcardtypen beschrijven:

opsommingsklasse CardType {SILVER, GOLD, PLATINUM}

2.2. Enum-constanten initialiseren

Enums in Kotlin kunnen, net als in Java, een constructor hebben. Omdat enum-constanten instanties zijn van een Enum class, kunnen de constanten worden geïnitialiseerd door specifieke waarden door te geven aan de constructor.

Laten we kleurwaarden specificeren voor verschillende kaarttypen:

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

We hebben toegang tot de kleurwaarde van een specifiek kaarttype met:

val color = CardType.SILVER.color

3. Enum-constanten als anonieme klassen

We kunnen specifiek enum-constant gedrag definiëren door ze als anonieme klassen te maken. Constanten moeten dan de abstracte functies overschrijven die zijn gedefinieerd in de Enum definitie.

Voor elk kaarttype kunnen we bijvoorbeeld verschillende cashback-berekeningen hebben.

Laten we eens kijken hoe we het kunnen implementeren:

opsommingsklasse CardType {ZILVER {override plezier berekenenCashbackPercent () = 0.25f}, GOUD {overschrijven plezier berekenenCashbackPercent () = 0.5f}, PLATINUM {overschrijven plezier berekenenCashbackPercent () = 0.75f}; abstract plezier berekenCashbackPercent (): Float}

We kunnen de overschreven methoden van de anonieme constante klassen aanroepen met:

val cashbackPercent = CardType.SILVER.calculateCashbackPercent ()

4. Enums die interfaces implementeren

Laten we zeggen dat er een ICardLimit interface die de kaartlimieten van verschillende kaarttypes definieert:

interface ICardLimit {fun getCreditLimit (): Int}

Laten we nu eens kijken hoe onze enum deze interface kan implementeren:

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

Om toegang te krijgen tot de kredietlimiet van een kaarttype, kunnen we dezelfde aanpak gebruiken als in het vorige voorbeeld:

val creditLimit = CardType.PLATINUM.getCreditLimit ()

5. Gemeenschappelijke Enum-constructen

5.1. Enum-constanten op naam krijgen

Om een ​​opsommingsconstante te krijgen door zijn Draad naam gebruiken we de waarde van() statische functie:

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

5.2. Itereren door Enum-constanten

Om alle enum-constanten te doorlopen, gebruiken we de waarden () statische functie:

voor (cardType in CardType.values ​​()) {println (cardType.color)}

5.3. Statische methoden

Om een ​​"statische" functie aan een enum toe te voegen, kunnen we een begeleidend object:

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

We kunnen deze functie nu aanroepen met:

val cardType = CardType.getCardTypeByName ("ZILVER")

Merk op dat Kotlin geen concept heeft van statisch methoden. Wat we hier hebben laten zien, is een manier om dezelfde functionaliteit te krijgen als in Java, maar met de functies van Kotlin.

6. Conclusie

Dit artikel bevat een inleiding tot enums in de Kotlin-taal en de belangrijkste kenmerken ervan.

We hebben enkele eenvoudige concepten geïntroduceerd, zoals het definiëren van enums en het initialiseren van de constanten. We hebben ook enkele geavanceerde functies laten zien, zoals het definiëren van enum-constanten als anonieme klassen en enums die interfaces implementeren.

De implementatie van al deze voorbeelden en codefragmenten is te vinden in het GitHub-project. Dit is een Maven-project, dus het moet gemakkelijk te importeren en uit te voeren zijn zoals het is.