Arbeiten mit Enums in Kotlin

1. Übersicht

In diesem Tutorial werden wir uns eingehend mit Kotlin-Enums befassen.

Mit der Entwicklung der Programmiersprachen hat sich auch die Verwendung und Anwendung von Aufzählungen weiterentwickelt.

Enum-Konstanten sind heutzutage nicht nur bloße Sammlungen von Konstanten - sie können Eigenschaften haben, Schnittstellen implementieren und vieles mehr.

Lesen Sie für Kotlin-Anfänger diesen Artikel über Kotlin-Grundlagen - Einführung in die Kotlin-Sprache.

2. Grundlegende Kotlin-Aufzählungen

Schauen wir uns die Grundlagen von Enums in Kotlin an.

2.1. Aufzählungen definieren

Definieren wir eine Aufzählung mit drei Konstanten, die die Kreditkartentypen beschreiben:

enum class CardType { SILVER, GOLD, PLATINUM }

2.2. Initialisieren von Enum-Konstanten

Enums in Kotlin können genau wie in Java einen Konstruktor haben. Da Enum-Konstanten Instanzen einer Enum- Klasse sind, können die Konstanten durch Übergabe bestimmter Werte an den Konstruktor initialisiert werden.

Geben Sie Farbwerte für verschiedene Kartentypen an:

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

Wir können auf den Farbwert eines bestimmten Kartentyps zugreifen mit:

val color = CardType.SILVER.color

3. Aufzählungskonstanten als anonyme Klassen

Wir können ein bestimmtes Verhalten der Enum-Konstante definieren, indem wir sie als anonyme Klassen erstellen. Konstanten müssen dann die in der Enum- Definition definierten abstrakten Funktionen überschreiben .

Beispielsweise können wir für jeden Kartentyp eine andere Cashback-Berechnung haben.

Mal sehen, wie wir es umsetzen können:

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 }

Wir können die überschriebenen Methoden der anonymen konstanten Klassen aufrufen mit:

val cashbackPercent = CardType.SILVER.calculateCashbackPercent()

4. Enums Implementing Interfaces

Angenommen , es gibt eine ICardLimit- Schnittstelle, die die Kartenlimits verschiedener Kartentypen definiert:

interface ICardLimit { fun getCreditLimit(): Int }

Nun wollen wir sehen, wie unsere Aufzählung diese Schnittstelle implementieren kann:

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

Um auf das Kreditlimit eines Kartentyps zuzugreifen, können Sie denselben Ansatz wie im vorherigen Beispiel verwenden:

val creditLimit = CardType.PLATINUM.getCreditLimit()

5. Gemeinsame Enum-Konstrukte

5.1. Aufrufen von Enum-Konstanten nach Namen

Um eine Enum-Konstante anhand ihres String- Namens zu erhalten, verwenden wir die statische Funktion valueOf () :

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

5.2. Durch Aufzählungskonstanten iterieren

Um alle Enum-Konstanten zu durchlaufen, verwenden wir die statische Funktion values ​​() :

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

5.3. Statische Methoden

Um einer Aufzählung eine „statische“ Funktion hinzuzufügen, können Sie ein Begleitobjekt verwenden :

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

Wir können diese Funktion jetzt aufrufen mit:

val cardType = CardType.getCardTypeByName("SILVER")

Beachten Sie, dass Kotlin kein Konzept für statische Methoden hat. Was wir hier gezeigt haben, ist eine Möglichkeit, die gleiche Funktionalität wie in Java zu erhalten, jedoch die Funktionen von Kotlin zu verwenden.

6. Fazit

Dieser Artikel enthält eine Einführung in Aufzählungen in Kotlin-Sprache und deren Hauptfunktionen.

Wir haben einige einfache Konzepte wie das Definieren von Aufzählungen und das Initialisieren der Konstanten eingeführt. Wir haben auch einige erweiterte Funktionen gezeigt, wie das Definieren von Enum-Konstanten als anonyme Klassen und Enums, die Schnittstellen implementieren.

Die Implementierung all dieser Beispiele und Codefragmente finden Sie im GitHub-Projekt. Dies ist ein Maven-Projekt, daher sollte es einfach zu importieren und auszuführen sein.