Suradnja s Enumovima u Kotlinu

1. Pregled

U ovom uputstvu duboko ćemo zaroniti u popise Kotlina.

Razvojem programskih jezika, uporaba i primjena enuma također su uznapredovale.

Enumske konstante danas nisu samo puke zbirke konstanti - mogu imati svojstva, implementirati sučelja i još mnogo toga.

Za početnike Kotlina pogledajte ovaj članak o osnovama Kotlina - Uvod u jezik Kotlin.

2. Osnovni kotlinski enumi

Pogledajmo osnove popisa u Kotlinu.

2.1. Utvrđivanje popisa

Odredimo enum kao tri konstante koje opisuju vrste kreditnih kartica:

vrsta kartice tipa enum {SREBRNO, ZLATO, PLATINUM}

2.2. Inicijalizacija enumskih konstanti

Enumi u Kotlinu, baš kao i na Javi, mogu imati konstruktor. Budući da su konstante nabrajanja primjerci Enum klase, konstante se mogu inicijalizirati prosljeđivanjem određenih vrijednosti konstruktoru.

Odredimo vrijednosti boja za razne vrste kartica:

enum class CardType (val boja: String) {SREBRNO ("sivo"), ZLATO ("žuto"), PLATINUM ("crno")}

Vrijednosti boje određene vrste kartice možemo pristupiti pomoću:

val boja = Vrsta kartice.SREBRNA.boja

3. Enum konstante kao anonimne klase

Specifično ponašanje enum konstante možemo definirati stvaranjem ih kao anonimne klase. Konstante tada trebaju nadjačati apstraktne funkcije definirane unutar Enum definicija.

Na primjer, za svaku vrstu kartice možemo imati različit izračun povrata novca.

Pogledajmo kako to možemo primijeniti:

klasa enum CardType {SILVER {nadjačati zabavu izračunatiCashbackPercent () = 0,25f}, GOLD {nadjačati zabavu izračunatiCashbackPercent () = 0,5f}, PLATINUM {nadjačati zabavu izračunatiCashbackPercent () = 0,75f}; sažetak zabave izračunajCashbackPercent (): Float}

Nadređene metode anonimnih konstantnih klasa možemo pozvati sa:

val cashbackPercent = CardType.SILVER.calculateCashbackPercent ()

4. Enumovi implementirajući sučelja

Recimo da postoji ICardLimit sučelje koje definira ograničenja kartica različitih vrsta kartica:

sučelje ICardLimit {zabava getCreditLimit (): Int}

Sada, da vidimo kako naš enum može implementirati ovo sučelje:

enum klasa CardType: ICardLimit {SILVER {nadjačati zabavu getCreditLimit () = 100000}, GOLD {nadjačati zabavu getCreditLimit () = 200000}, PLATINUM {nadjačati zabavu getCreditLimit () = 300000}}

Da bismo pristupili kreditnom ograničenju neke vrste kartice, možemo koristiti isti pristup kao u prethodnom primjeru:

val creditLimit = Vrsta kartice.PLATINUM.getCreditLimit ()

5. Konstrukcije uobičajenog nabrajanja

5.1. Dobivanje enumskih konstanti po imenu

Da se dobije enum konstanta po svom Niz ime, koristimo vrijednost() statička funkcija:

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

5.2. Iteriranje kroz enumske konstante

Za iteraciju kroz sve konstante nabrajanja koristimo vrijednosti () statička funkcija:

za (cardType u CardType.values ​​()) {println (cardType.color)}

5.3. Statičke metode

Da bismo enumu dodali "statičku" funkciju, možemo koristiti objekt pratilac:

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

Sada se možemo pozvati na ovu funkciju pomoću:

val cardType = CardType.getCardTypeByName ("SREBRNO")

Imajte na umu da Kotlin nema koncept statički metode. Ovdje smo pokazali način da se dobije ista funkcionalnost kao na Javi, ali pomoću Kotlinovih značajki.

6. Zaključak

Ovaj članak predstavlja uvod u popise na jeziku Kotlin i ključne je značajke.

Uveli smo nekoliko jednostavnih koncepata poput definiranja enuma i inicijalizacije konstanti. Pokazali smo i neke napredne značajke poput definiranja enum konstanti kao anonimnih klasa i enuma koji implementiraju sučelja.

Provedbu svih ovih primjera i isječaka koda možete pronaći u projektu GitHub. Ovo je Maven projekt, pa bi ga trebalo biti lako uvesti i pokrenuti kakav jest.


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