Konštruktéri Kotlin

1. Prehľad

V tomto tutoriáli sa podrobne pozrieme na konštruktory v Kotline.

Začnime rýchlou rekapituláciou konceptu: na vytváranie objektov používame konštruktory. Vyzerajú ako deklarácie metód, ale vždy majú rovnaký názov ako trieda a nič nevracajú.

Pre nastavenie projektu Kotlin si pozrite náš úvodný návod.

V Kotline môže mať trieda primárny konštruktor a jeden alebo viac ďalších sekundárnych konštruktorov.

V ďalších častiach si prejdeme každý typ a súvisiace pojmy.

2. Primárny konštruktér

Prvý spôsob, ako vytvoriť objekt v Kotline, je použitie primárneho konštruktora.

Toto je súčasť hlavičky triedy. Parametrom môžu byť tiež polia triedy, ktoré umiestnime po deklarácii triedy.

Poďme sa pozrieť na vyhlásenie základnej triedy s dvoma vlastnosťami a primárnym konštruktorom:

trieda Person konstruktor (názov valca: String, vek valca: Int? = null)

V tomto príklade sme deklarovali vlastnosti prostredníctvom val kľúčové slovo. Toto sa chová rovnako ako bežné premenné, s tým rozdielom val vlastnosti sú iba na čítanie (Java konečné náprotivok kľúčového slova).

Ak chceme referenciu neskôr zmeniť, mali by sme použiť var namiesto toho kľúčové slovo. Nemôžeme však vynechať typ poľa v primárnom konštruktore, pretože to musí byť explicitné.

V niektorých prípadoch môžeme vynechať konštruktér kľúčové slovo. Toto je povinné iba v dvoch prípadoch: keď použijeme anotácie, napr @Autowired alebo modifikátory prístupu, ako súkromné alebo chránené.

V konštruktoroch môžeme tiež použiť predvolené parametre Kotlin.

Ďalej sa pozrime, ako môžeme použiť náš primárny konštruktor:

val person = Osoba ("John") val personWithAge = Osoba ("Mark", 22)

To vidíme názov triedy je vyvolanie konštruktora. Nie je potrebné používať Nový kľúčové slovo.

Pre porovnanie, pozrime sa tiež na ekvivalent Java deklarácie konštruktora:

trieda PersonJava {finálny názov reťazca; konečný celočíselný vek; public PersonJava (názov reťazca) {this.name = meno; this.age = null; } public PersonJava (meno reťazca, celé číslo) {this.name = meno; this.age = vek; }}

Ako vidíte, Java by na dosiahnutie rovnakého výsledku potrebovala oveľa viac kódu.

2.1. Primárne konštruktéri na JVM

Upozorňujeme, že kompilátor vygeneruje na JVM ďalší konštruktor bez parametrov. Z tohto dôvodu vytvorí inštanciu objektu s predvolenými hodnotami.

Týmto spôsobom môže Kotlin dobre spolupracovať s knižnicami ako Jackson alebo JPA, ktoré na vytváranie inštancií tried používajú konštruktor no-args:

osoba triedy (meno valca: String = "")

3. Inicializácia vlastností z parametrov konštruktora

Inicializátory vlastností z tela triedy môžu používať parametre primárneho konštruktora.

Poďme sa pretvarovať názov do upperCaseName nehnuteľnosť:

trieda Osoba (meno valca: String, vek valca: Int? = null) {val upperCaseName: String = name.toUpperCase ()}

Výstup v konzole môžeme vidieť pridaním druhého init blok:

init {println ("Názov veľkého písmena je $ upperCaseName")}

4. Inicializačné bloky

Do primárneho konštruktora nemôžeme vložiť žiadny kód.

Niekedy však musíme vykonať nejaký inicializačný kód. Dobrým miestom pre ňu je blok inicializátora, ktorý má predponu init kľúčové slovo.

Inicializačný blok sa volá po primárnom konštruktore. Na tomto mieste tiež môžeme získať prístup k poliam tried.

Trieda môže mať jeden alebo viac init blokov.

Pripojme blok inicializátora k nášmu Osoba trieda:

init {println ("Dobrý deň, volám $ meno") if (surname.isEmpty ()) {hod IllegalArgumentException ("priezvisko nemôže byť prázdne!")}}

Ďalej, keď vytvoríme a Osoba objekt triedy, uvidíme na konzole:

Dobrý deň, som John

Hodili by sme IllegalArgumentException pre prázdnych priezvisko.

Keď ich máme veľa init bloky, budú vykonané v rovnakom poradí, v akom sa vyskytujú v tele triedy.

5. Sekundárny konštruktér

V triede Kotlin môžeme tiež deklarovať jeden alebo viac sekundárnych konštruktorov.Sekundárne konštruktory majú predponu konštruktér kľúčové slovo:

class Car {val id: String val type: String constructor (id: String, type: String) {this.id = id this.type = type}}

A základné použitie:

fun main (args: Array) {val car = Car ("1", "sport") val suvCar = Car ("2", "suvCar")} 

Každý sekundárny konštruktor musí delegovať na primárneho konštruktora. Urobíme to do toto kľúčové slovo.

Poďme presunúť naše vlastnosti do primárny konštruktor a upraviť sekundárny konštruktor:

trieda Auto (val id: String, val typ: String) {constructor (id: String): this (id, "unknown")}

6. Konštruktéri a dedičstvo

Môžeme použiť primárny konštruktor nadtriedy.

Všimnite si, že všetky triedy v Kotline sú konečné predvolene. To znamená, že budeme musieť pridať otvorené kľúčové slovo, aby sme mohli dediť z nášho Osoba trieda.

Pridajme an Zamestnanec triedy, ktorá dedí z Osoba trieda. Obaja používajú primárne konštruktory:

trieda Zamestnanec (meno: String, plat: Int): Osoba (meno) 

Týmto krokom odovzdáme a názov primárnemu konštruktorovi Osoba trieda. Ďalej pridávame nové pole s názvom plat v Zamestnanec trieda.

7. Záver

V tomto rýchlom článku sme diskutovali o rôznych spôsoboch vytvárania konštruktorov v jazyku Kotlin. Naše polia môžeme inštancovať rôznymi spôsobmi, podľa našich želaní.

Implementáciu všetkých našich príkladov možno nájsť v projekte Github.

Viac informácií o samotných funkciách Kotlin nájdete v našom úvode do Kotlin.


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