Kotlin konstruktører

1. Oversikt

I denne veiledningen tar vi en grundig titt på konstruktører i Kotlin.

La oss starte med en rask oppsummering av konseptet: vi bruker konstruktører til å lage objekter. Disse ser ut som metodedeklarasjoner, men har alltid samme navn som klassen, og de returnerer ingenting.

For oppsettet av et Kotlin-prosjekt, ta en titt på vår introduksjonsveiledning.

I Kotlin kan en klasse ha en primærkonstruktør og en eller flere ekstra sekundære konstruktører.

I de neste avsnittene vil vi gå gjennom hver type og tilknyttede konsepter.

2. Primær konstruktør

Den første måten å lage et objekt i Kotlin er ved å bruke en primær konstruktør.

Dette er en del av kursoverskriften. Parametere kan også være klassefelt som vi plasserer etter klassedeklarasjonen.

La oss ta en titt på en grunnleggende klassedeklarasjon, med to egenskaper og en primær konstruktør:

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

I dette eksemplet har vi deklarert egenskaper gjennom val nøkkelord. Dette oppfører seg på samme måte som vanlige variabler, med nevnelsen at val egenskapene er skrivebeskyttet (Java endelig nøkkelord motstykke).

Hvis vi ønsker å endre referansen senere, bør vi bruke var søkeord i stedet. Vi kan imidlertid ikke utelate typen felt i primærkonstruktøren, da dette må være eksplisitt.

I noen tilfeller kan vi utelate konstruktør nøkkelord. Dette er bare obligatorisk i to tilfeller: når vi bruker merknader, som @Autowired eller få tilgang til modifikatorer, som privat eller beskyttet.

Vi kan også bruke Kotlin-standardparametere i konstruktørene.

La oss deretter se hvordan vi kan bruke vår primære konstruktør:

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

Vi kan se det et klassenavn er en konstruktøranrop. Det er ikke nødvendig å bruke ny nøkkelord.

Som referanse, la oss også se på Java-ekvivalenten til en konstruktørerklæring:

klasse PersonJava {final String name; endelig helhetsalder; offentlig PersonJava (strengnavn) {this.name = navn; this.age = null; } offentlig PersonJava (strengnavn, hel alder) {this.name = navn; this.age = alder; }}

Som du kan se, trenger Java mye mer kode for å oppnå det samme resultatet.

2.1. Primærkonstruktører på JVM

Vær oppmerksom på at kompilatoren vil generere en ekstra konstruktør uten parametere på JVM. For dette formålet vil det instantiere et objekt med standardverdier.

På denne måten kan Kotlin fungere bra med slike biblioteker som Jackson eller JPA, som bruker no-args-konstruktøren til å lage klasseinstanser:

klasse Person (val navn: String = "")

3. Initialisere egenskaper fra konstruktorparametere

Eiendomsinitialiserere fra klassens kropp kan bruke de primære konstruktørparametrene.

La oss transformere Navn til upperCaseName eiendom:

class Person (val name: String, val age: Int? = null) {val upperCaseName: String = name.toUpperCase ()}

Vi kan se utdataene i konsollen ved å legge til den andre i det blokkere:

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

4. Initialiseringsblokker

Vi kan ikke legge inn noen kode i hovedkonstruktøren.

Imidlertid må vi noen ganger utføre en initialiseringskode. Et godt sted for det er en initialiseringsblokk, som er prefikset med i det nøkkelord.

Initialiseringsblokken kalles etter den primære konstruktøren. Vi kan også få tilgang til klassefelt på dette stedet.

En klasse kan ha en eller flere i det blokker.

La oss legge til initialiseringsblokken til vår Person klasse:

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

Neste, når vi oppretter en Person klasseobjekt, vi ser i konsollen:

Hei, jeg er John

Vi ville kaste IllegalArgumentException for de tomme etternavn.

Når vi har mange i det blokker, vil de bli utført i samme rekkefølge som de vises i klassens kropp.

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 prefikset med konstruktør nøkkelord:

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

Og den grunnleggende bruken:

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

Hver sekundærkonstruktør må delegere til primærkonstruktøren. Vi gjør dette innen dette nøkkelord.

La oss flytte eiendommene våre til primær konstruktør og endre sekundær konstruktør:

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

6. Konstruktører og arv

Vi kan bruke en primærkonstruktør av superklassen.

Merk at alle klassene i Kotlin er endelig som standard. Dette betyr at vi må legge til åpen nøkkelord slik at vi kan arve fra vårt Person klasse.

La oss legge til en Ansatt klasse som arver fra Person klasse. De bruker begge primære konstruktører:

klasse Ansatt (navn: String, val lønn: Int): Person (navn) 

Ved å gjøre dette passerer vi a Navn til hovedkonstruktøren av Person klasse. I tillegg legger vi til et nytt felt som heter lønn i Ansatt klasse.

7. Konklusjon

I denne raske artikkelen diskuterte vi forskjellige måter å lage konstruktører på Kotlin-språket. Vi kan instantiere våre felt på mange forskjellige måter, i henhold til våre ønsker.

Implementeringen av alle eksemplene våre finner du i Github-prosjektet.

For mer informasjon om Kotlin-funksjonene, ta en titt på introduksjonen til Kotlin.


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