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.