Kotlin in Java: Wie konvertiert man Dateien? Leitfaden für Entwickler

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum Kotlin in Java konvertieren, wenn Kotlin das „neue Java“ ist?

\n\n

Es scheint paradox: Sie schreiben in Kotlin und möchten dann Java-Code erhalten. Warum? Tatsächlich gibt es viele Situationen. Sie könnten ein in Kotlin geschriebenes Projekt erben, aber Ihr Team ist noch nicht bereit, darauf umzusteigen. Oder Sie lernen Kotlin durch den Vergleich mit Java – das ist eine der effektivsten Methoden. Vielleicht müssen Sie eine Kotlin-Bibliothek in ein altes Java-Projekt einbinden und möchten verstehen, wie genau eine bestimmte Methode funktioniert.

\n\n

Auf jeden Fall ist die Frage „How to convert a Kotlin source file to a Java source file“ eine der beliebtesten auf Stack Overflow (tausende Aufrufe). Und heute werden wir sie von A bis Z durchgehen. Sie erfahren, wie Sie offiziell (über IntelliJ IDEA) und inoffiziell (über Dekompilierung) eine .kt-Datei in eine .java-Datei umwandeln, welche Fallstricke Sie erwarten und was zu tun ist, wenn nichts funktioniert.

\n\n

1. Direkte Konvertierung: Mythos oder Realität?

\n\n

Wir warnen Sie gleich vorweg: Eine „eins-zu-eins“-Rückkonvertierung von Kotlin → Java gibt es nicht. Kotlin ist nicht nur „Zucker“ über Java, es hat seine eigene Semantik: Null-Sicherheit, Coroutinen, Erweiterungsfunktionen, Data-Klassen. Java kennt diesen Luxus nicht. Daher wird jeder Konverter einen ungefähren Code ausgeben, der oft umständlich aussieht und Aufrufe interner Kotlin-Funktionen enthält (z. B. Intrinsics.checkNotNullParameter()).

\n\n

Aber das bedeutet nicht, dass die Aufgabe unlösbar ist. Es gibt drei Hauptansätze:

\n\n
    \n
  • Dekompilierung von Bytecode – die genaueste Methode, integriert in IntelliJ IDEA und Android Studio.
  • \n
  • JADX – für Android-Entwickler, wenn keine Quellen, sondern nur eine APK vorhanden ist.
  • \n
  • Online-Konverter – eine schnelle Option für kleine Code-Ausschnitte.
  • \n
\n\n

2. Methode Nr. 1: Dekompilierung über IntelliJ IDEA (die zuverlässigste)

\n\n

Wenn Sie die ursprüngliche .kt-Datei haben, können Sie sie in IntelliJ IDEA (oder Android Studio) öffnen und die IDE bitten, den äquivalenten Java-Code anzuzeigen. Wie geht das?

\n\n

Schritt 1. Öffnen Sie die Kotlin-Datei

\n

Nehmen wir an, wir haben eine einfache Klasse in Kotlin:

\n\n
// File: Person.kt\ndata class Person(val name: String, val age: Int) {\n    fun greet() = "Hello, my name is $name"\n}
\n\n

Schritt 2. Starten Sie die Dekompilierung

\n

Wählen Sie im IntelliJ-Menü Tools → Kotlin → Show Kotlin Bytecode. Es öffnet sich ein Bereich mit dem Bytecode. Klicken Sie in diesem Bereich auf die Schaltfläche Decompile – und Sie sehen die Java-Version Ihrer Datei.

\n\n

Folgendes gibt die IDE für unsere Person.kt aus:

\n\n
// Java-Dekompilierung\npublic final class Person {\n   @NotNull\n   private final String name;\n   private final int age;\n\n   @NotNull\n   public final String getName() {\n      return this.name;\n   }\n\n   public final int getAge() {\n      return this.age;\n   }\n\n   public Person(@NotNull String name, int age) {\n      Intrinsics.checkNotNullParameter(name, "name");\n      super();\n      this.name = name;\n      this.age = age;\n   }\n\n   @NotNull\n   public final String greet() {\n      return "Hello, my name is " + this.name;\n   }\n\n   // equals(), hashCode(), toString() – automatisch generiert\n}
\n\n

Wichtig: Der Code enthält Aufrufe von Intrinsics – das ist Teil der Kotlin-Laufzeitumgebung. Wenn Sie solchen Code ohne Kotlin-Abhängigkeiten in ein Projekt kopieren, wird er nicht kompilieren. Sie müssen entweder kotlin-stdlib hinzufügen oder diese Prüfungen manuell entfernen.

\n\n

3. Methode Nr. 2: JADX – für Android ohne Quellcode

\n\n

Wenn Sie nur eine APK-Datei haben und verstehen möchten, wie eine bestimmte Kotlin-Klasse implementiert ist, verwenden Sie JADX. Dies ist ein Dekompilierer, der DEX-Bytecode in lesbaren Java-Code umwandelt. Kotlin-Klassen in einer APK werden dennoch in JVM-Bytecode kompiliert, also wird JADX damit zurechtkommen.

\n\n

Beispiel: Sie finden in der APK eine Klasse mit einer Coroutine. In Kotlin könnte das so aussehen

Blogs

Buchempfehlungen