Kotlin Java-interoperabilitet

1. Oversigt

I denne vejledning skal vi diskutere interoperabilitet mellem Java og Kotlin. Vi skal dække nogle grundlæggende eksempler såvel som nogle andre mere komplekse scenarier.

2. Opsætning af Kotlin

Oprettelse af et Kotlin-projekt er meget simpelt ved hjælp af IntelliJ, Eclipse og endda kommandolinjen - men til denne vejledning følger vi installationstrinnene fra vores tidligere tutorial Introduktion til Kotlin da det allerede har det, vi har brug for til vores demo-formål.

3. Grundlæggende

At kalde Java fra Kotlin er ligetil og glat, da det blev bygget med ideen om interoperabilitet.

Lad os oprette dette Kunde klasse ved hjælp af core Java:

offentlig klasse kunde {privat streng fornavn; privat streng efternavn; privat int alder // standard settere og getters}

4. Getters og Setters

Lad os nu arbejde med denne enkle Java POJO fra Kotlin.

Getters og setters, der følger Java-konventionen for disse typer metoder, er repræsenteret som attributter i Kotlin:

val customer = Customer () customer.firstName = "Frodo" customer.lastName = "Baggins" assertEquals (customer.firstName, "Frodo") assertEquals (customer.lastName, "Baggins")

Det er værd at bemærke det det ny nøgleord er ikke påkrævet til instantiering af et objekt.

Sproget forsøger at undgå kedelpladekoden så meget som muligt, så vi ikke kalder getters / settere eksplicit - vi kan simpelthen bruge dem ved hjælp af feltnotationen.

Vi skal huske, at hvis en Java-klasse kun har settermetoder, vil ejendommen ikke være tilgængelig, da sproget ikke understøtter set-only-egenskaber.

Hvis en metode vender tilbage ugyldig så når det kaldes fra Kotlin, vender det tilbage Enhed.

5. Null sikkerhed

Kotlin er kendt for sin nul sikkerhedsfunktion, men som vi ved er dette ikke tilfældet for Java, hvilket gør det upraktisk for objekter, der kommer fra det. Et meget simpelt eksempel kan ses, hvis vi har en Snor matrix:

val characterList = ArrayList () characterList.add ("Bilbo") val character = list [0]

Kotlin viser ingen ugyldighedsfejl på kompileringstidspunktet, når en metode kaldes på en variabel af en platformstype - og denne type kan ikke skrives eksplicit på sproget. Så når en værdi tildeles, kan vi stole på denne slutning, eller vi kan bare vælge den type, vi forventer:

val a: streng? = tegn val a: String = tegn

De er begge tilladt, men i tilfælde af ikke-nul-typen vil compileren straks hævde ved tildelingen, hvilket forhindrer variablen i at holde en nulværdi.

I sidste ende gør compileren sit bedste for at undgå nul, men det er stadig umuligt at fjerne det på grund af generiske lægemidler.

6. Arrays

I Kotlin er arrays uændrede - hvilket betyder, at det ikke tillader os at tildele Array til Array for at forhindre runtime-fejl.

Så vi har et eksempel på en klasse:

public class ArrayExample {public int sumValues ​​(int [] nums) {int res = 0; for (int x: nums) {res + = x; } returnere res; }}

Hvis vi ønsker at videregive en række primitiver til denne metode, skal vi bruge en af ​​de specialiserede klasser fra Kotlin:

val ex = ArrayExample () val numArray = intArrayOf (1, 2, 3) assertEquals (ex. sumValues ​​(numArray), 6)

7. Varargs

Java giver os muligheden for at videregive et vilkårligt antal argumenter til en metode:

public int sumArgValues ​​(int ... sums) {// samme som ovenfor}

Processen er den samme, med den lille forskel, at vi har brug for spredningsoperatøren * at passere arrayet:

assertEquals (ex.sumValues ​​(* numArray), 6)

I øjeblikket er der ingen mulighed for at passere nul til en varargs-metode.

8. Undtagelser

I Kotlin er alle undtagelser ikke markeret, hvilket betyder, at compileren ikke vil tvinge os til at fange nogen undtagelser:

// I vores Java-kode smider det offentlige ugyldige skriveliste () IOException {File file = new File ("E: //file.txt"); FileReader fr = ny FileReader (fil); fr.close (); } // I Kotlin sjov makeReadFile () {val ax = ArrayExample () ax.writeList ()}

9. Refleksion

Kort sagt fungerer refleksion på både Kotlin- og Java-klasser:

valforekomst = kunde :: class.java valkonstruktører = instans.konstruktører assertEquals (konstruktører.størrelse, 1) assertEquals (konstruktører [0] .navn, "com.baeldung.java.Customer")

Vi kan også få getter- og settermetoder, a KProperty til et Java-felt og en KFunktion for en konstruktør.

10. Objektmetoder

Når objekter importeres til Kotlin, alle referencer af typen java.lang.Objekt blive ændret til kotlin. enhver:

val instans = kunde :: klasse val super supertyper = instans.supertyper assertEquals (supertyper [0] .toString (), "kotlin.Any")

11. Konklusion

Denne hurtige vejledning giver os en større forståelse af Kotlin Java-interoperabilitet. Vi kiggede på nogle enkle eksempler for at vise, hvordan Kotlin generelt fører til mindre detaljeret kode generelt.

Som altid kan implementeringen af ​​alle disse eksempler og uddrag findes på GitHub.


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