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 Bytecode
Decompile
przyciskAktualizacja:
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 Java
jest 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ć
Kotlin
plik ź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 Bytecode
i wybierz Show Kotlin Bytecode
z menu.
Decompile
przycisk na górze Kotlin Bytecode
panelu.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 assembleDebug
jadx-gui ./app/build/outputs/apk/debug/app-debug.apk
W 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: