Kotlin Java interoperabilnost

1. Pregled

U ovom uputstvu razgovarat ćemo o interoperabilnost između Jave i Kotlina. Pokriti ćemo neke osnovne primjere, kao i neke druge složenije scenarije.

2. Postavljanje Kotlina

Stvaranje Kotlin projekta vrlo je jednostavno pomoću IntelliJ-a, Eclipse-a, pa čak i naredbenog retka - međutim za ovaj tutorial slijedit ćemo korake instalacije iz našeg prethodnog vodiča Uvod u Kotlin budući da već ima ono što nam treba za naše demo svrhe.

3. Osnove

Pozivanje Jave iz Kotlina jednostavno je i glatko jer je izgrađeno s idejom interoperabilnosti.

Stvorimo ovo Kupac klasa koja koristi jezgru Java:

kupac javne klase {private String firstName; private String lastName; privatno int doba; // standardni postavljači i dobivači}

4. Geteri i seteri

Ajmo sada raditi s ovom jednostavnom Java POJO iz Kotlina.

Dobavljači i postavljači koji slijede Java konvenciju za ove vrste metoda predstavljeni su kao atributi u Kotlinu:

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

Vrijedno je to napomenuti the novi ključna riječ nije potrebna za instanciranje objekta.

Jezik pokušava što je moguće više izbjeći šifru, pa ne pozivamo izričito gettere / settere - možemo ih jednostavno koristiti pomoću oznake polja.

Moramo imati na umu da ako Java klasa ima samo metode postavljanja, svojstvo neće biti dostupno jer jezik ne podržava svojstva koja su samo postavljena.

Ako se metoda vrati poništiti onda kad se pozove iz Kotlina vratit će se Jedinica.

5. Nulta sigurnost

Kotlin je dobro poznat po null sigurnosnoj značajki, ali kao što znamo, to nije slučaj za Javu, što ga čini nepraktičnim za objekte koji dolaze iz njega. Vrlo jednostavan primjer može se vidjeti ako imamo a Niz niz:

val characterList = ArrayList () characterList.add ("Bilbo") val znak = popis [0]

Kotlin ne prikazuje nikakve pogreške pri nuliranju u vrijeme kompajliranja kada se metoda poziva na varijablu tipa platforme - i ta se vrsta ne može eksplicitno napisati na jeziku. Dakle, kada se dodijeli vrijednost, možemo se osloniti na ovaj zaključak ili jednostavno odabrati vrstu koju očekujemo:

val a: Niz? = znak val a: Niz = znak

Oboje su dopušteni, ali u slučaju ne-null tipa, prevodilac će odmah potvrditi nakon dodjele, što će spriječiti da varijabla sadrži null vrijednost.

Na kraju, prevodilac čini sve da izbjegne nule, ali svejedno, nemoguće ga je eliminirati zbog generičkih podataka.

6. Nizovi

U Kotlinu su nizovi invarijantni - što znači da nam ne dopušta dodjeljivanje Polje do Polje kako bi se spriječili kvarovi u izvođenju.

Dakle, imamo primjer klase:

javna klasa ArrayExample {public int sumValues ​​(int [] nums) {int res = 0; za (int x: nums) {res + = x; } povratak res; }}

Ako ovoj metodi želimo proslijediti niz primitiva, moramo koristiti jednu od specijaliziranih klasa iz Kotlina:

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

7. Varargovi

Java nam daje mogućnost prosljeđivanja bilo kojeg broja argumenata metodi:

public int sumArgValues ​​(int ... sume) {// isto kao gore}

Postupak je isti, s malom razlikom da trebamo koristiti operator širenja * za prosljeđivanje niza:

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

Trenutno ne postoji mogućnost prolaska null na metodu varargs.

8. Iznimke

U Kotlinu su sve iznimke neoznačene, što znači da nas prevoditelj neće prisiliti da uhvatimo bilo kakve iznimke:

// U našem Java kodu public void writeList () baca IOException {File file = new File ("E: //file.txt"); FileReader fr = novi FileReader (datoteka); fr.close (); } // // u Kotlinu zabavno makeReadFile () {val ax = ArrayExample () ax.writeList ()}

9. Refleksija

Jednostavno rečeno, refleksija djeluje i na kotlin i na Java tečajeve:

val instance = Korisnik :: class.java val constructors = instance.constructors assertEquals (constructors.size, 1) assertEquals (constructors [0] .name, "com.baeldung.java.Customer")

Također možemo dobiti metode dobivanja i postavljanja, a KPvlasništvo za Java polje i a KFunkcija za konstruktora.

10. Objektne metode

Kada se objekti uvoze u Kotlin, sve reference tipa java.lang.Object promijenite se u kotlin.Svaki:

val instance = Korisnik :: klasa val supertypes = instance.supertypes assertEquals (supertypes [0] .toString (), "kotlin.Any")

11. Zaključak

Ovaj brzi vodič daje nam veće razumijevanje Kotlin Java interoperabilnost. Pogledali smo nekoliko jednostavnih primjera kako bismo pokazali kako Kotlin općenito dovodi do manje opširnog koda.

Kao i uvijek, implementacija svih ovih primjera i isječaka može se naći na GitHubu.


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