Kotlin konstruktori

1. Pregled

U ovom uputstvu temeljito ćemo pogledati konstruktore u Kotlinu.

Počnimo s brzim prikazom koncepta: koristimo konstruktore za stvaranje objekata. Izgledaju kao deklaracije metoda, ali uvijek imaju isto ime kao klasa i ne vraćaju ništa.

Za postavljanje Kotlin projekta pogledajte naš uvodni vodič.

U Kotlinu klasa može imati primarni konstruktor i jedan ili više dodatnih sekundarnih konstruktora.

U sljedećim ćemo odjeljcima proučiti svaku vrstu i povezane koncepte.

2. Primarni konstruktor

Prvi način za stvaranje objekta u Kotlinu je upotreba primarnog konstruktora.

Ovo je dio zaglavlja klase. Parametri mogu biti i polja klase, koja postavljamo nakon deklaracije klase.

Pogledajmo deklaraciju osnovne klase, s dva svojstva i primarnim konstruktorom:

klasa Konstruktor osobe (naziv vala: String, val starost: Int? = null)

U ovom smo primjeru deklarirali svojstva putem val ključna riječ. To se ponaša na isti način kao i regularne varijable, uz spomen da val svojstva su samo za čitanje (Java konačni pandan ključne riječi).

Ako kasnije želimo promijeniti referencu, trebali bismo koristiti var umjesto toga ključna riječ. Međutim, ne možemo izostaviti vrstu polja u primarnom konstruktoru, jer to mora biti eksplicitno.

U nekim slučajevima možemo izostaviti konstruktor ključna riječ. To je obvezno samo u dva slučaja: kada koristimo napomene, poput @Autowired ili modifikatori pristupa, poput privatni ili zaštićen.

Također, u konstruktorima možemo koristiti zadane parametre Kotlina.

Dalje, pogledajmo kako možemo koristiti naš primarni konstruktor:

val person = Person ("John") val personWithAge = Person ("Oznaka", 22)

To možemo vidjeti ime klase je poziv konstruktora. Nema potrebe za korištenjem novi ključna riječ.

Za referencu, pogledajmo i Java ekvivalent deklaracije konstruktora:

klasa PersonJava {konačni naziv niza; konačna Integer dob; javna PersonJava (ime niza) {this.name = name; this.age = null; } javna PersonJava (ime niza, cijela dob) {this.name = name; this.age = dob; }}

Kao što vidite, Java bi trebala puno više koda da bi postigla isti rezultat.

2.1. Primarni konstruktori na JVM-u

Imajte na umu da će prevoditelj generirati dodatni konstruktor bez parametara na JVM-u. U tu svrhu instancirat će objekt sa zadanim vrijednostima.

Na taj način Kotlin može dobro surađivati ​​s bibliotekama kao što su Jackson ili JPA, koje koriste konstruktor no-args za stvaranje instanci klasa:

razred Osoba (val ime: String = "")

3. Inicijalizacija svojstava iz parametara konstruktora

Inicijalizatori svojstava iz tijela klase mogu koristiti primarne parametre konstruktora.

Preobrazimo se Ime prema upperCaseName svojstvo:

razred Osoba (val ime: Niz, val dob: Int? = null) {val upperCaseName: String = name.toUpperCase ()}

Izlaz u konzoli možemo vidjeti dodavanjem drugog u tome blok:

init {println ("Veliko slovo je $ upperCaseName")}

4. Blokovi inicijalizatora

Ne možemo staviti nijedan kod u primarni konstruktor.

Međutim, ponekad moramo izvršiti neki inicijalizacijski kod. Dobro mjesto za to je blok inicijalizatora koji ima prefiks u tome ključna riječ.

Blok inicijalizatora poziva se nakon primarnog konstruktora. Na ovom mjestu također možemo pristupiti poljima razreda.

Razred može imati jednog ili više u tome blokovi.

Dodamo blok inicijalizatora na naš Osoba razred:

init {println ("Zdravo, ja sam $ ime") if (surname.isEmpty ()) {throw IllegalArgumentException ("Prezime ne može biti prazno!")}}

Dalje, kada kreiramo Osoba objekt klase, vidjet ćemo u konzoli:

Pozdrav, ja sam John

Bacili bismo IlegalArgumentException za prazne prezime.

Kad ih imamo mnogo u tome blokovi, izvršavat će se istim redoslijedom kao što se pojavljuju u tijelu klase.

5. Sekundarni konstruktor

U klasi Kotlina možemo također deklarirati jedan ili više sekundarnih konstruktora.Sekundarni konstruktori imaju prefiks sa konstruktor ključna riječ:

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

I osnovna upotreba:

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

Svaki sekundarni konstruktor mora delegirati primarnom konstruktoru. Učinit ćemo to do ovaj ključna riječ.

Premjestimo svoja svojstva na primarni konstruktor i modificirati sekundarni konstruktor:

class Car (val id: String, val type: String) {konstruktor (id: String): this (id, "unknown")}

6. Konstruktori i nasljeđivanje

Možemo koristiti primarni konstruktor superklase.

Imajte na umu da svi razredi u Kotlinu jesu konačni prema zadanim postavkama. To znači da ćemo trebati dodati otvorena ključnu riječ kako bismo mogli nasljeđivati ​​od naše Osoba razred.

Dodajmo znak Zaposlenik klasa koja nasljeđuje od Osoba razred. Oboje koriste primarne konstruktore:

razred Zaposlenik (ime: Niz, val plaća: Int): Osoba (ime) 

Čineći ovo, prolazimo kroz Ime primarnom konstruktoru Osoba razred. Uz to dodajemo novo polje pod nazivom plaća u Zaposlenik razred.

7. Zaključak

U ovom kratkom članku razgovarali smo o različitim načinima stvaranja konstruktora na jeziku Kotlin. Instanciramo svoja polja na mnogo različitih načina, u skladu s našim željama.

Provedba svih naših primjera može se naći u projektu Github.

Za više informacija o samim značajkama Kotlina, pogledajte naš uvod u Kotlin.