Jobber med Enums i Kotlin

1. Oversikt

I denne opplæringen vil vi dykke dypt inn i Kotlin-enums.

Med utviklingen av programmeringsspråk har bruken og anvendelsen av enums også avansert.

Enum-konstanter i dag er ikke bare samlinger av konstanter - de kan ha egenskaper, implementere grensesnitt og mye mer.

For nybegynnere i Kotlin, sjekk ut denne artikkelen om grunnleggende om Kotlin - Introduksjon til Kotlin-språket.

2. Grunnleggende Kotlin Enums

La oss se på det grunnleggende om enums i Kotlin.

2.1. Definere Enums

La oss definere en enum som å ha tre konstanter som beskriver kredittkorttyper:

enum class CardType {SILVER, GOLD, PLATINUM}

2.2. Initialiserer Enum-konstanter

Enums i Kotlin, akkurat som i Java, kan ha en konstruktør. Siden enum-konstanter er forekomster av en Enum klasse, kan konstantene initialiseres ved å overføre spesifikke verdier til konstruktøren.

La oss spesifisere fargeverdier til forskjellige korttyper:

enum klasse CardType (valfarge: streng) {SILVER ("grå"), GULL ("gul"), PLATINUM ("svart")}

Vi får tilgang til fargeverdien til en bestemt korttype med:

val color = CardType.SILVER.color

3. Enum-konstanter som anonyme klasser

Vi kan definere spesifikk enum konstant atferd ved å opprette dem som anonyme klasser. Konstanter må deretter overstyre de abstrakte funksjonene som er definert i Enum definisjon.

For eksempel kan vi ha forskjellige beregninger for tilbakebetaling for hver korttype.

La oss se hvordan vi kan implementere det:

enum class CardType {SILVER {override fun calcCashbackPercent () = 0.25f}, GOLD {override fun calcCashbackPercent () = 0.5f}, PLATINUM {override fun calcCashbackPercent () = 0.75f}; abstrakt moro beregneCashbackPercent (): Float}

Vi kan påkalle de overstyrte metodene til de anonyme konstante klassene med:

val cashbackPercent = CardType.SILVER.calculateCashbackPercent ()

4. Enums Implementing Grensesnitt

La oss si at det er en ICardLimit grensesnitt som definerer kortgrensene for forskjellige korttyper:

grensesnitt ICardLimit {fun getCreditLimit (): Int}

La oss nå se hvordan vårt enum kan implementere dette grensesnittet:

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

For å få tilgang til kredittgrensen for en korttype, kan vi bruke samme tilnærming som i forrige eksempel:

val creditLimit = CardType.PLATINUM.getCreditLimit ()

5. Common Enum Constructs

5.1. Få Enum-konstanter etter navn

For å få en enum konstant ved sin String navnet bruker vi verdien av() statisk funksjon:

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

5.2. Iterere gjennom Enum-konstanter

For å gjenta gjennom alle enum-konstanter, bruker vi verdier () statisk funksjon:

for (cardType i CardType.values ​​()) {println (cardType.color)}

5.3. Statiske metoder

For å legge til en “statisk” funksjon i en enum, kan vi bruke a ledsagerobjekt:

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

Vi kan nå påkalle denne funksjonen med:

val cardType = CardType.getCardTypeByName ("SILVER")

Merk at Kotlin ikke har et konsept av statisk metoder. Det vi har vist her en måte å få den samme funksjonaliteten som i Java, men ved å bruke Kotlins funksjoner.

6. Konklusjon

Denne artikkelen introduserer enumer på Kotlin-språk, og det er viktige funksjoner.

Vi har introdusert noen enkle konsepter som å definere enums og initialisere konstantene. Vi har også vist noen avanserte funksjoner som å definere enum-konstanter som anonyme klasser, og enums som implementerer grensesnitt.

Implementeringen av alle disse eksemplene og kodebiter finner du i GitHub-prosjektet. Dette er et Maven-prosjekt, så det skal være enkelt å importere og kjøre som det er.


$config[zx-auto] not found$config[zx-overlay] not found