Kotlin Java-interoperabilitet

1. Oversikt

I denne opplæringen skal vi diskutere interoperabilitet mellom Java og Kotlin. Vi skal dekke noen grunnleggende eksempler, så vel som noen andre mer komplekse scenarier.

2. Sette opp Kotlin

Å lage et Kotlin-prosjekt er veldig enkelt ved hjelp av IntelliJ, Eclipse og til og med kommandolinjen - men for denne opplæringen skal vi følge installasjonstrinnene fra vår forrige opplæring Introduksjon til Kotlin siden det allerede har det vi trenger for demo-formål.

3. Grunnleggende

Å ringe Java fra Kotlin er greit og greit siden det ble bygget med ideen om interoperabilitet.

La oss lage dette Kunde klasse ved hjelp av kjernen Java:

offentlig klasse kunde {privat streng fornavn; privat streng etternavn; privat alder; // standard setters og getters}

4. Getters og Setters

La oss nå jobbe med denne enkle Java POJO fra Kotlin.

Getters og setters som følger Java-konvensjonen for denne typen metoder er representert som attributter i Kotlin:

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

Det er verdt å merke seg det de ny nøkkelord er ikke nødvendig for å instantiere et objekt.

Språket prøver å unngå kokerplatekoden så mye som mulig, slik at vi ikke kaller getters / settere eksplisitt - vi kan bare bruke dem ved å bruke feltnotasjonen.

Vi må huske at hvis en Java-klasse bare har settermetoder, vil egenskapen ikke være tilgjengelig siden språket ikke støtter bare settegenskaper.

Hvis en metode kommer tilbake tomrom så når den blir kalt fra Kotlin vil den komme tilbake Enhet.

5. Null sikkerhet

Kotlin er kjent for sin null sikkerhetsfunksjon, men som vi vet er dette ikke tilfelle for Java, noe som gjør det upraktisk for gjenstander som kommer fra det. Et veldig enkelt eksempel kan sees hvis vi har en String matrise:

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

Kotlin viser ingen nullitetsfeil på kompileringstidspunktet når en metode kalles på en variabel av en plattformtype - og denne typen kan ikke skrives eksplisitt på språket. Så når en verdi tildeles, kan vi stole på denne slutningen, eller vi kan bare velge typen vi forventer:

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

De er begge tillatt, men når det gjelder ikke-null-typen, vil kompilatoren umiddelbart hevde ved tildeling, noe som vil forhindre at variabelen har en nullverdi.

Til slutt gjør kompilatoren sitt beste for å unngå null, men likevel er det umulig å eliminere det på grunn av generiske legemidler.

6. Arrays

I Kotlin er matriser invariante - noe som betyr at det ikke tillater oss å tildele Array til Array for å forhindre kjøretidsfeil.

Så vi har et eksempel på en klasse:

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

Hvis vi ønsker å gi en rekke primitiver til denne metoden, må vi bruke en av de spesialiserte klassene fra Kotlin:

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

7. Varargs

Java gir oss muligheten til å overføre et hvilket som helst antall argumenter til en metode:

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

Prosessen er den samme, med den lille forskjellen at vi trenger for å bruke spredningsoperatøren * for å passere matrisen:

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

For øyeblikket er det ingen mulighet for å passere null til en varargs-metode.

8. Unntak

I Kotlin er alle unntak ukontrollert, noe som betyr at kompilatoren ikke vil tvinge oss til å fange noen unntak:

// I vår Java-kode kaster public void writeList () IOException {File file = new File ("E: //file.txt"); FileReader fr = ny FileReader (fil); fr.close (); } // I Kotlin-moro makeReadFile () {val ax = ArrayExample () ax.writeList ()}

9. Refleksjon

Enkelt sagt fungerer refleksjon på både Kotlin- og Java-klasser:

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

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

10. Objektmetoder

Når objekter importeres til Kotlin, alle referanser av typen java.lang.Objekt bli endret til kotlin. noen:

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

11. Konklusjon

Denne raske opplæringen gir oss en større forståelse av Kotlin Java-interoperabilitet. Vi så på noen enkle eksempler for å vise hvordan Kotlin generelt fører til mindre detaljert kode generelt.

Som alltid kan implementeringen av alle disse eksemplene og utdragene finnes på GitHub.


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