Pretvaranje Kotlin datoteke u Javu

1. Pregled

Kotlin je poznat po svojoj interoperabilnosti s Javom. To je, naravno, moguće jer se obje izvode na Java Virtual Machineu - drugim riječima, kompajlirane su u isti bajt kod.

U ovom uputstvu istražit ćemo dva načina za izvođenje pretvorbe iz datoteke Kotlin u datoteku Java.

2. Zašto pretvoriti Kotlin u Javu?

Prvo, razmotrimo nekoliko razloga zašto bismo možda željeli izvršiti takvu pretvorbu:

  • Da biste razumjeli što se zapravo događa ispod haube
  • Istražiti probleme izvedbe
  • Da se riješimo Kotlina iz našeg projekta

Pretvorba iz Kotlina u Javu zahtijeva dva koraka. Moramo kompajlirati Kotlin kod u JVM bytecode. Zatim, moramo dekompilirati rezultat u Java kôd.

Međutim, ovaj nam postupak nikada neće dati ispravno radni proizvodni kod. Stoga je obično potreban daljnji ručni rad.

U sljedećim odjeljcima detaljnije ćemo pogledati dvije metode izvođenja pretvorbe.

3. Pretvorba pomoću alata naredbenog retka

Recimo da imamo ime datoteke Kotlin Uzorak.kt sa sljedećim sadržajem:

zabava printEvenNumbers () {for (i u 0..10 koraku 2) {println (i)}}

Prvo, kompajlirajmo naredbu:

kotlinc Uzorak.kt

Kao rezultat, datoteka s imenom UzorakKt.razred stvorit će se.

Sad moramo dekompilirati ovu datoteku na Javu.

Da bismo to učinili, koristit ćemo FernFlower. Možemo dobiti papratnjača.jar preuzimanjem projekta i pokretanjem gradnje Gradle. Jednom kada imamo JAR datoteku, naredba za pokretanje je:

java -jar paprati.jar UzorakKt.razred.

Nakon toga vidjet ćemo datoteku SampleKt.java:

uvoz kotlin.Metadata; uvoz kotlin.ranges.IntProgression; uvoz kotlin.ranges.IntRange; uvoz 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 "," "}) javna završna klasa SampleKt {javna statička konačna praznina printEvenNumbers () {byte var3 = 0; IntProgression var10000 = RangesKt.step ((IntProgression) (novi IntRange (var3, 10)), 2); int i = var10000.getFirst (); int var1 = var10000.getLast (); int var2 = var10000.getStep (); if (var2> = 0) {if (i> var1) {return; }} inače if (i <var1) {return; } while (true) {boolean var4 = false; System.out.println (i); if (i == var1) {return; } i + = var2; }}}

Kao što vidimo, kod je prilično kompliciran. Nadalje, još uvijek ima ovisnosti o jeziku Kotlin. Dobili smo dio koda koji je beskoristan u proizvodnji zbog čitljivosti i performansi.

4. Konverzija s IntelliJ IDEA

Uz IntelliJ IDEA možemo napraviti ista dva koraka na prikladniji način.

Da bismo kompilirali izvor u bytecode, kliknite Alati -> Kotlin -> Prikaži Kotlin bajtkod iz glavnog kontekstnog izbornika.

Pojavit će se nova kartica i trebali bismo moći vidjeti JVM bytecode u čitljivom obliku:

Od tamo jednostavno kliknite Dekompilirati dugme za stvaranje Java datoteke. Imajte na umu da IntelliJ IDEA koristi Fernflower ispod poklopca, tako da će rezultirajuća Java datoteka biti identična onoj prikazanoj gore.

5. Zaključak

U ovom smo brzom vodiču naučili dva načina za pretvaranje datoteke Kotlin u Javu.

Također smo razgovarali o nekoliko slučajeva kada je ovaj postupak koristan i zašto bismo ga trebali izbjegavati zbog proizvodnog koda.