Mam plik źródłowy Kotlin, ale chcę go przetłumaczyć na Javę.
Jak przekonwertować Kotlin na źródło Java?
Mam plik źródłowy Kotlin, ale chcę go przetłumaczyć na Javę.
Jak przekonwertować Kotlin na źródło Java?
Odpowiedzi:
Jak powiedział @Vadzim, w IntelliJ lub Android Studio wystarczy wykonać następujące czynności, aby uzyskać kod Java z kotlin:
Menu > Tools > Kotlin > Show Kotlin BytecodeDecompileprzyciskAktualizacja:
Dzięki najnowszej wersji (1.2+) wtyczki Kotlin możesz także zrobić bezpośrednio Menu > Tools > Kotlin -> Decompile Kotlin to Java.
Decompile Kotlin to Javajest obecnie włączony tylko dla skompilowanych klas Kotlin .
Możesz skompilować Kotlina do kodu bajtowego, a następnie użyć dezasemblera Java.
Dekompilacja może odbywać się w IntelliJ Idea lub przy użyciu FernFlower https://github.com/fesh0r/fernflower (dzięki @Jire)
Nie było zautomatyzowanego narzędzia, które sprawdziłem kilka miesięcy temu (i żadnych planów dotyczących jednego AFAIK)
Aby przekonwertować
Kotlinplik źródłowy na plikJavaźródłowy, musisz (w Android Studio):
Naciśnij Cmd- Shift- Ana komputerze Mac lub naciśnij Ctrl- Shift- Ana komputerze z systemem Windows.
Wpisz akcję, której szukasz: Kotlin Bytecodei wybierz Show Kotlin Bytecodez menu.
Decompileprzycisk na górze Kotlin Bytecodepanelu.Kompiluję Kotlin do kodu bajtowego, a następnie dekompiluję go do Javy. Kompiluję za pomocą kompilatora Kotlin i dekompiluję za pomocą cfr .
Mój projekt jest tutaj .
To pozwala mi skompilować to:
package functionsiiiandiiilambdas.functions.p01tailiiirecursive
tailrec fun findFixPoint(x: Double = 1.0): Double =
if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
Do tego:
package functionsiiiandiiilambdas.functions.p01tailiiirecursive;
public final class ExampleKt {
public static final double findFixPoint(double x) {
while (x != Math.cos(x)) {
x = Math.cos(x);
}
return x;
}
public static /* bridge */ /* synthetic */ double findFixPoint$default(
double d, int n, Object object) {
if ((n & 1) != 0) {
d = 1.0;
}
return ExampleKt.findFixPoint(d);
}
}
Jak wspomniał @ louis-cad „Źródło Kotlin -> Kod bajtów Java -> Źródło Java” to jedyne jak dotąd rozwiązanie.
Chciałbym jednak wspomnieć o sposobie, który preferuję: za pomocą dekompilatora Jadx dla Androida .
Pozwala zobaczyć kod generujący zamknięcia i, jak dla mnie, wynikowy kod jest „czystszy” niż kod dekompilatora IntelliJ IDEA.
Zwykle, gdy muszę zobaczyć kod źródłowy Java dowolnej klasy Kotlin, robię:
./gradlew assembleDebugjadx-gui ./app/build/outputs/apk/debug/app-debug.apkW tym GUI działa podstawowa funkcjonalność IDE: wyszukiwanie klasy, deklaracja „kliknij, aby przejść”. itp.
Cały kod źródłowy można zapisać, a następnie wyświetlić przy użyciu innych narzędzi, takich jak IntelliJ IDEA.
brew install jadx
Java i Kotlin działają na wirtualnej maszynie Java (JVM).
Konwersja pliku Kotlin do pliku Java wymaga dwóch kroków, tj. Kompilacji kodu Kotlin do kodu bajtowego JVM, a następnie dekompilacji kodu bajtowego do kodu Java.
Kroki, aby przekonwertować plik źródłowy Kotlin na plik źródłowy Java: