Konvertieren einer Kotlin-Datei in Java

1. Übersicht

Kotlin ist bekannt für seine Interoperabilität mit Java. Dies ist natürlich möglich, da beide auf der Java Virtual Machine ausgeführt werden - mit anderen Worten, sie werden mit demselben Bytecode kompiliert.

In diesem Tutorial werden zwei Möglichkeiten untersucht, wie eine Konvertierung von einer Kotlin-Datei in eine Java-Datei durchgeführt werden kann.

2. Warum Kotlin nach Java konvertieren?

Betrachten wir zunächst einige Gründe, warum wir eine solche Konvertierung durchführen möchten:

  • Um zu verstehen, was wirklich unter der Haube vor sich geht
  • Um Leistungsprobleme zu untersuchen
  • Kotlin von unserem Projekt loszuwerden

Die Konvertierung von Kotlin nach Java erfordert zwei Schritte. Wir müssen den Kotlin-Code in den JVM-Bytecode kompilieren. Dann müssen wir das Ergebnis in den Java-Code dekompilieren.

Dieser Prozess wird uns jedoch niemals einen ordnungsgemäß funktionierenden Produktionscode geben . Daher sind normalerweise weitere manuelle Arbeiten erforderlich.

In den nächsten Abschnitten werden zwei Methoden zur Durchführung der Konvertierung näher erläutert.

3. Konvertierung mit Befehlszeilentools

Angenommen , wir haben einen Kotlin-Dateinamen Sample.kt mit folgendem Inhalt:

fun printEvenNumbers() { for (i in 0..10 step 2) { println(i) } }

Zuerst kompilieren wir den Code mit dem Befehl:

kotlinc Sample.kt

Als Ergebnis wird eine Datei mit dem Namen SampleKt.class erstellt.

Jetzt müssen wir diese Datei nach Java dekompilieren .

Dazu verwenden wir FernFlower . Wir können die fernflower.jar erhalten, indem wir das Projekt herunterladen und den Gradle-Build ausführen . Sobald wir die JAR-Datei haben, lautet der auszuführende Befehl:

java -jar fernflower.jar SampleKt.class .

Danach sehen wir die Datei 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)(new 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) { boolean var4 = false; System.out.println(i); if (i == var1) { return; } i += var2; } } }

Wie wir sehen können, ist der Code ziemlich kompliziert . Darüber hinaus bestehen weiterhin Kotlin-Sprachabhängigkeiten. Wir haben einen Code erhalten, der aufgrund der Lesbarkeit und Leistung in der Produktion unbrauchbar ist.

4. Konvertierung mit IntelliJ IDEA

Mit IntelliJ IDEA können wir dieselben zwei Schritte bequemer ausführen.

Um die Quelle zu Bytecode zu kompilieren, klicken Sie im Hauptkontextmenü auf Extras -> Kotlin -> Kotlin-Bytecode anzeigen .

Eine neue Karte wird angezeigt und wir sollten in der Lage sein, den JVM-Bytecode in einer für Menschen lesbaren Form anzuzeigen:

Von dort aus klicken wir einfach auf die Schaltfläche Dekompilieren , um eine Java-Datei zu erstellen. Beachten Sie, dass IntelliJ IDEA Fernflower unter der Haube verwendet, sodass die resultierende Java-Datei mit der oben gezeigten identisch ist.

5. Schlussfolgerung

In diesem kurzen Tutorial haben wir zwei Möglichkeiten zum Konvertieren einer Kotlin-Datei in Java kennengelernt.

Wir haben auch einige Fälle besprochen, in denen dieser Prozess nützlich ist und warum wir ihn für den Produktionscode vermeiden sollten.