Kotlin konstruktører

1. Oversigt

I denne vejledning tager vi et grundigt kig på konstruktører i Kotlin.

Lad os starte med en hurtig opsummering af konceptet: vi bruger konstruktører til at skabe objekter. Disse ligner metodedeklarationer, men har altid det samme navn som klassen, og de returnerer ikke noget.

For opsætningen af ​​et Kotlin-projekt, se på vores introduktionsvejledning.

I Kotlin kan en klasse have en primær konstruktør og en eller flere yderligere sekundære konstruktører.

I de næste sektioner gennemgår vi hver type og tilknyttede begreber.

2. Primær konstruktør

Den første måde at oprette et objekt i Kotlin er ved hjælp af en primær konstruktør.

Dette er en del af klasseoverskriften. Parametre kan også være klassefelter, som vi placerer efter klassedeklarationen.

Lad os se på en grundlæggende klassedeklaration med to egenskaber og en primær konstruktør:

klasse Person konstruktør (val navn: streng, val alder: Int? = null)

I dette eksempel har vi deklareret egenskaber gennem val nøgleord. Dette opfører sig på samme måde som regelmæssige variabler med nævnt det val egenskaber er skrivebeskyttet (Java endelig nøgleord modstykke).

Hvis vi ønsker at ændre referencen senere, skal vi bruge var nøgleord i stedet. Vi kan dog ikke udelade felttypen i den primære konstruktør, da dette skal være eksplicit.

I nogle tilfælde kan vi udelade konstruktør nøgleord. Dette er kun obligatorisk i to tilfælde: når vi bruger kommentarer, f.eks @Autowired eller få adgang til modifikatorer, f.eks privat eller beskyttet.

Vi kan også bruge Kotlin-standardparametre i konstruktørerne.

Lad os derefter se, hvordan vi kan bruge vores primære konstruktør:

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

Det kan vi se et klasse navn er en konstruktør påkaldelse. Der er ingen grund til at bruge ny nøgleord.

Som reference skal vi også se på Java-ækvivalenten for en konstruktørerklæring:

klasse PersonJava {endelig strengnavn; endelig heltalealder offentlig PersonJava (strengnavn) {this.name = navn; this.age = null; } offentlig PersonJava (strengnavn, helårsalder) {this.name = navn; this.age = alder; }}

Som du kan se, har Java brug for meget mere kode for at opnå det samme resultat.

2.1. Primære konstruktører på JVM

Bemærk, at compileren genererer en ekstra konstruktør uden parametre på JVM. Til dette formål vil det instantiere et objekt med standardværdier.

På denne måde kan Kotlin arbejde godt sammen med sådanne biblioteker som Jackson eller JPA, som bruger no-args-konstruktøren til at oprette klasseinstanser:

klasse Person (val navn: String = "")

3. Initialisering af egenskaber fra konstruktorparametre

Ejendomsinitialiserere fra klasseorganet kan bruge de primære konstruktorparametre.

Lad os transformere navn til upperCaseName ejendom:

klasse Person (val navn: String, val alder: Int? = null) {val upperCaseName: String = name.toUpperCase ()}

Vi kan se output i konsollen ved at tilføje det andet i det blok:

init {println ("Store bogstaver er $ upperCaseName")}

4. Initialiseringsblokke

Vi kan ikke lægge nogen kode i den primære konstruktør.

Vi er dog undertiden nødt til at udføre en initialiseringskode. Et godt sted for det er en initialiseringsblok, som er forud for i det nøgleord.

Initialiseringsblokken kaldes efter den primære konstruktør. Vi kan også få adgang til klassefelter på dette sted.

En klasse kan have en eller flere i det blokke.

Lad os tilføje initialiseringsblokken til vores Person klasse:

init {println ("Hej, jeg er $ name") hvis (efternavn.isEmpty ()) {kast IllegalArgumentException ("Efternavn kan ikke være tomt!")}}

Dernæst, når vi opretter en Person klasseobjekt, vi ser i konsollen:

Hej, jeg er John

Vi ville kaste IllegalArgumentException for det tomme efternavn.

Når vi har mange i det blokke, de vil blive udført i samme rækkefølge som de vises i klassens krop.

5. Sekundær konstruktør

I en Kotlin-klasse kan vi også erklære en eller flere sekundære konstruktører.Sekundære konstruktører er forud for konstruktør nøgleord:

klasse Bil {val id: String val type: String constructor (id: String, type: String) {this.id = id this.type = type}}

Og den grundlæggende brug:

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

Hver sekundær konstruktør skal delegere til den primære konstruktør. Vi gør det inden det her nøgleord.

Lad os flytte vores ejendomme til primær konstruktør og ændre sekundær konstruktør:

klasse Car (val id: String, val type: String) {constructor (id: String): this (id, "unknown")}

6. Konstruktører og arv

Vi kan bruge en primær konstruktør af superklassen.

Bemærk, at alle klasser i Kotlin er endelig som standard. Dette betyder, at vi bliver nødt til at tilføje åben nøgleord, så vi kan arve fra vores Person klasse.

Lad os tilføje en Medarbejder klasse, der arver fra Person klasse. De bruger begge primære konstruktører:

klasse Medarbejder (navn: String, val løn: Int): Person (navn) 

Ved at gøre dette passerer vi en navn til den primære konstruktør af Person klasse. Derudover tilføjer vi et nyt felt kaldet løn i Medarbejder klasse.

7. Konklusion

I denne hurtige artikel diskuterede vi forskellige måder at skabe konstruktører på Kotlin-sproget. Vi kan instantiere vores felter på mange forskellige måder efter vores ønsker.

Implementeringen af ​​alle vores eksempler findes i Github-projektet.

For mere information om Kotlin-funktionerne, se venligst vores introduktion til Kotlin.


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