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.