Interoperabilita Kotlin Java

1. Prehľad

V tomto výučbe budeme diskutovať o interoperabilita medzi programami Java a Kotlin. Povieme si niekoľko základných príkladov, ako aj niektoré ďalšie zložitejšie scenáre.

2. Nastavenie Kotlin

Vytvorenie projektu Kotlin je veľmi jednoduché pomocou IntelliJ, Eclipse a dokonca aj príkazového riadku - pre tento tutoriál však budeme postupovať podľa inštalačných krokov z nášho predchádzajúceho tutoriálu Úvod do Kotlina pretože už má to, čo potrebujeme pre naše demo účely.

3. Základy

Volanie Javy z Kotlinu je priame a plynulé, pretože bolo postavené na myšlienke interoperability.

Vytvorme to Zákazník trieda pomocou jadra Java:

verejná trieda Zákazník {private String firstName; private String priezvisko; súkromný int vek; // štandardní zakladatelia a obstarávatelia}

4. Getters and Setters

Poďme teraz pracovať s týmto jednoduchým Java POJO od Kotlin.

Získávatelia a nastavovatelia, ktorí sa riadia konvenciou Java pre tieto typy metód, sú v Kotline predstavovaní ako atribúty:

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

Stojí za zmienku, že the Nový kľúčové slovo sa nevyžaduje na vytvorenie inštancie objektu.

Jazyk sa snaží čo najviac vyhnúť štandardnému kódu, aby sme nenazývali vyslovene getry / settery - môžeme ich jednoducho použiť pomocou zápisu poľa.

Musíme pamätať na to, že ak má trieda Java iba metódy settera, vlastnosť nebude prístupná, pretože jazyk nepodporuje vlastnosti iba na nastavenie.

Ak sa metóda vráti neplatný potom keď sa bude volať od Kotlina, vráti sa Jednotka.

5. Nulová bezpečnosť

Kotlin je dobre známy pre svoju nulovú bezpečnostnú funkciu, ale ako vieme, v prípade Javy to tak nie je, čo je pre objekty pochádzajúce z neho nemožné. Veľmi jednoduchý príklad je možné vidieť, ak máme a String pole:

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

Kotlin v čase kompilácie, keď sa metóda volá na premennú typu platformy, nezobrazuje chyby nullability - a tento typ nie je možné výslovne napísať v jazyku. Keď je teda hodnota priradená, môžeme sa na ňu spoľahnúť, alebo si môžeme zvoliť typ, ktorý očakávame:

val a: Reťazec? = znaková hodnota a: Reťazec = znak

Sú povolené obaja, ale v prípade typu, ktorý nemá hodnotu null, kompilátor okamžite priradí zadanie, čo zabráni premennej uchovávať hodnotu null.

Nakoniec sa kompilátor snaží vyhnúť nulovým bodom, ale napriek tomu je nemožné ho z dôvodu generík vylúčiť.

6. Polia

V Kotline sú polia nemenné - čo znamená, že by nám to neumožnilo priradiť Pole do Pole aby sa zabránilo zlyhaniam za behu.

Máme teda ukážkovú triedu:

public class ArrayExample {public int sumValues ​​(int [] nums) {int res = 0; pre (int x: nums) {res + = x; } návrat res; }}

Ak chceme tejto metóde odovzdať pole primitívov, musíme použiť jednu zo špecializovaných tried od Kotlina:

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

7. Varargs

Java nám umožňuje odovzdávať metóde ľubovoľný počet argumentov:

public int sumArgValues ​​(int ... sums) {// rovnaké ako vyššie}

Proces je rovnaký, s miernym rozdielom, že musíme použiť operátor šírenia * odovzdať pole:

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

V súčasnosti neexistuje možnosť absolvovania nulový na varargsovu metódu.

8. Výnimky

V Kotline nie sú začiarknuté všetky výnimky, čo znamená, že kompilátor nás nebude nútiť chytiť žiadne výnimky:

// V našom kóde Java public void writeList () hodí IOException {File file = new File ("E: //file.txt"); FileReader fr = nový FileReader (súbor); fr.close (); } // V Kotline zábava makeReadFile () {val ax = ArrayExample () ax.writeList ()}

9. Reflexia

Zjednodušene povedané, reflexia funguje na triedach Kotlin aj Java:

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

Môžeme tiež získať metódy getra a setra, a KProperty pre pole Java a KFunkcia pre konštruktéra.

10. Objektové metódy

Keď sa objekty importujú do Kotlin, všetky odkazy typu java.lang.Objekt zmeniť sa na kotlin.Any:

val instance = Customer :: class val supertypes = instance.supertypes assertEquals (supertypy [0] .toString (), "kotlin.Any")

11. Záver

Tento rýchly tutoriál nám poskytuje lepšie pochopenie Interoperabilita Kotlin Java. Pozreli sme sa na niekoľko jednoduchých príkladov, ktoré nám ukazujú, ako Kotlin všeobecne vedie k celkovo menej vernému kódu.

Implementáciu všetkých týchto príkladov a úryvkov ako vždy nájdete na GitHub.


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