Kotlin Java interoperabilitás

1. Áttekintés

Ebben az oktatóanyagban megvitatjuk a interoperabilitás a Java és a Kotlin között. Bemutatunk néhány alapvető példát, valamint néhány bonyolultabb forgatókönyvet.

2. Kotlin felállítása

A Kotlin projekt létrehozása nagyon egyszerű az IntelliJ, az Eclipse és még a parancssor használatával is - ennek az oktatóanyagnak azonban az előző oktatóanyagunk telepítési lépéseit fogjuk követni Bevezetés Kotlinba mivel már megvan, amire szükségünk van a bemutató céljainkhoz.

3. Az alapok

A Java hívása Kotlinból egyszerű és gördülékeny, mivel az interoperabilitás gondolatával készült.

Hozzuk létre ezt Vevő osztály az alap Java használatával:

public class Ügyfél {private String keresztnév; privát karakterlánc vezetéknév; privát int kor; // szabványos beállítók és szerelők}

4. Getters és Setters

Dolgozzunk most ezzel a Kotlin egyszerű Java POJO-val.

Az ilyen típusú módszerekre vonatkozó Java konvenciót követő betűkészletek és beállítók attribútumként szerepelnek a Kotlinban:

val customer = Ügyfél () customer.firstName = "Frodo" customer.lastName = "Baggins" assertEquals (customer.firstName, "Frodo") assertEquals (customer.lastName, "Baggins")

Érdemes ezt megjegyezni a új kulcsszó nem szükséges egy tárgy példányosítására.

A nyelv igyekszik a lehető legnagyobb mértékben elkerülni a kazán kódot, ezért nem hívjuk kifejezetten a gettereket / beállítókat - egyszerűen használhatjuk őket a mező jelöléssel.

Nem szabad megfeledkeznünk arról, hogy ha egy Java osztálynak csak szetter metódusai vannak, akkor a tulajdonság nem lesz elérhető, mivel a nyelv nem támogatja a csak set-tulajdonságokat.

Ha egy módszer visszatér üres akkor amikor Kotlinból hívják, visszatér Mértékegység.

5. Semmi biztonság

Kotlin közismert semmilyen biztonsági funkciójával, de mint tudjuk, a Java esetében ez nem így van, ami miatt nem praktikus a belőle érkező tárgyak számára. Nagyon egyszerű példa látható, ha van egy Húr sor:

val characterList = ArrayList () characterList.add ("Bilbo") val karakter = lista [0]

A Kotlin nem jelenít meg semmisségi hibát a fordítás során, amikor egy metódust egy platform típusú változóra hívnak meg - és ez a típus nem írható kifejezetten a nyelvre. Tehát, ha értéket rendelünk, támaszkodhatunk erre a következtetésre, vagy egyszerűen kiválaszthatjuk a várt típust:

val a: Húr? = karakter val a: Karakterlánc = karakter

Mindkettő megengedett, de a nem null típusú típus esetén a fordító a kijelöléskor azonnal érvényesíteni fogja, ami megakadályozza, hogy a változó null értéket tartson.

Végül a fordító mindent megtesz a nullák elkerülése érdekében, de ennek ellenére a generikusok miatt lehetetlen megszüntetni.

6. tömbök

Kotlinban a tömbök változatlanok - ami azt jelenti, hogy nem engednék hozzárendelni Sor nak nek Sor a futásidejű hibák elkerülése érdekében.

Tehát van egy példa osztályunk:

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

Ha egy primitív tömböt szeretnénk átadni ennek a módszernek, akkor az egyik speciális osztályt kell használnunk Kotlinból:

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

7. Varargs

A Java lehetőséget ad arra, hogy tetszőleges számú argumentumot továbbítsunk egy módszerhez:

public int sumArgValues ​​(int ... sums) {// a fentivel megegyező}

A folyamat ugyanaz, azzal a kis különbséggel, hogy a spread operátort kell használnunk * átadni a tömböt:

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

Jelenleg nincs továbbjutási lehetőség nulla egy varargs módszerre.

8. Kivételek

Kotlinban minden kivétel nincs bejelölve, ami azt jelenti, hogy a fordító nem kényszerít minket kivételekre:

// A Java kódunkban a public void writeList () dobja az IOException {File file = new File ("E: //file.txt"); FileReader fr = new FileReader (fájl); fr.zár (); } // Kotlinban fun makeReadFile () {val ax = ArrayExample () ax.writeList ()}

9. Reflexió

Egyszerűen fogalmazva, a reflexió működik mind a Kotlin, mind a Java osztályon:

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

Szerezhetünk getter és szetter módszereket is, a KProperty Java mezőhöz és a KFunction egy kivitelező számára.

10. Objektum módszerek

Amikor az objektumokat importálják a Kotlinba, a típus minden hivatkozása java.lang.Tárgy váltson át kotlin.Any:

val példány = Ügyfél :: osztály val szupertípusok = instance.supertypes assertEquals (szupertipusok [0] .toString (), "kotlin.Any")

11. Következtetés

Ez a gyors bemutató nagyobb megértést nyújt a Kotlin Java interoperabilitás. Megnéztünk néhány egyszerű példát annak bemutatására, hogy a Kotlin általában hogyan vezet kevesebb verbális kódhoz.

Mint mindig, ezeknek a példáknak és kivonatoknak a megvalósítása megtalálható a GitHubon.