Kotlin fájl konvertálása Java-ra

1. Áttekintés

Kotlin jól ismert a Java-val való átjárhatóságáról. Ez természetesen lehetséges, mert mindkettő a Java virtuális gépen fut - más szóval, ugyanazon byte-kódra vannak fordítva.

Ebben az oktatóanyagban két módszert tárunk fel egy Kotlin fájlból Java fájlba történő átalakítás végrehajtására.

2. Miért kell konvertálni a Kotlint Java-ra?

Először vegyünk fontolóra néhány okot, amiért érdemes ilyen konverziót végrehajtani:

  • Megérteni, hogy mi folyik valójában a motorháztető alatt
  • A teljesítményproblémák kivizsgálása
  • Megszabadulni Kotlintól a projektünkből

Az átalakítás Kotlinból Java-ba két lépést igényel. Le kell fordítanunk a Kotlin kódot a JVM bytecode-ra. Ezután dekompilálnunk kell az eredményt a Java kódra.

Azonban, ez a folyamat soha nem ad megfelelő működésű gyártási kódot. Ezért általában további kézi munkára van szükség.

A következő szakaszokban a konverzió végrehajtásának két módszerét vizsgáljuk meg közelebbről.

3. Konvertálás a parancssori eszközök segítségével

Tegyük fel, hogy van egy Kotlin fájlnév Minta.kt a következő tartalommal:

fun printEvenNumbers () {for (i 0..10 2. lépésben) {println (i)}}

Először állítsuk össze a kódot a következő paranccsal:

kotlinc Minta.kt

Ennek eredményeként egy fájl a névvel SampleKt.class létrejön.

Most meg kell dekompilálja ezt a fájlt Java-ra.

Ehhez felhasználjuk Páfrányvirág. Megkaphatjuk a páfrányvirág.jar a projekt letöltésével és a Gradle build futtatásával. Miután megvan a JAR fájl, a futtatni kívánt parancs:

java -jar fernflower.jar SampleKt.class.

Ezt követően meglátjuk a fájlt SampleKt.java:

import kotlin.Metadata; import kotlin.ranges.IntProgression; import kotlin.ranges.IntRange; import kotlin.ranges.RangesKt; @Metadata (mv = {1, 1, 15}, bv = {1, 0, 3}, k = 2, d1 = {"\ u0000 \ u0006 \ n \ u0000 \ n \ u0002 \ u0010 \ u0002 \ u001a \ u0006 \ u0010 \ u0000 \ u001a \ u00020 \ u0001 "}, d2 = {" printEvenNumbers "," "}) public final class SampleKt {public static final void printEvenNumbers () {byte var3 = 0; IntProgression var10000 = RangesKt.step ((IntProgression) (új IntRange (var3, 10)), 2); int i = var10000.getFirst (); int var1 = var10000.getLast (); int var2 = var10000.getStep (); if (var2> = 0) {if (i> var1) {return; }} else if (i <var1) {return; } while (true) {logikai var4 = hamis; System.out.println (i); if (i == var1) {return; } i + = var2; }}}

Ahogy látjuk, a kód elég bonyolult. Továbbá még mindig van Kotlin nyelvfüggősége. Olyan kódot kaptunk, amely az olvashatóság és a teljesítmény miatt haszontalan a gyártásban.

4. Konvertálás az IntelliJ IDEA-val

Az IntelliJ IDEA segítségével ugyanazt a két lépést tehetjük meg kényelmesebb módon.

A forrás byte-kódra fordításához kattintsunk a gombra Eszközök -> Kotlin -> Kotlin Bytecode megjelenítése a fő helyi menüből.

Új kártya jelenik meg, és képesnek kell lennünk a JVM bájtkódjának megtekintésére ember által olvasható formában:

Innentől kezdve egyszerűen kattints a Decompile gomb Java fájl előállításához. Ne feledje, hogy az IntelliJ IDEA a Fernflower burkolatát használja, így a kapott Java fájl megegyezik a fentiekkel.

5. Következtetés

Ebben a gyors bemutatóban két módszert tanultunk meg egy Kotlin fájl Java-ba konvertálásáról.

Megbeszéltünk néhány olyan esetet is, amikor ez a folyamat hasznos, és miért kell kerülnünk a gyártási kódnál.