J'ai un fichier source Kotlin, mais je veux le traduire en Java.
Comment puis-je convertir Kotlin en Java source?
Comme @Vadzim l'a dit, dans IntelliJ ou Android Studio, il suffit de procéder comme suit pour obtenir le code Java de kotlin:
Menu > Tools > Kotlin > Show Kotlin Bytecode
Decompile
Mise à jour:
Avec une version récente (1.2+) du plugin Kotlin, vous pouvez aussi faire directement Menu > Tools > Kotlin -> Decompile Kotlin to Java
.
Vous pouvez compiler Kotlin en bytecode, puis utiliser un désassembleur Java.
La décompilation peut être effectuée dans IntelliJ Idea ou à l'aide de FernFlower https://github.com/fesh0r/fernflower (merci @Jire)
Il n’existait pas d’outil automatisé, comme j’ai vérifié il ya deux mois (et je n’ai pas de projet de ce que je sache).
Pour convertir un fichier source
Kotlin
en un fichier sourceJava
dont vous avez besoin (lorsque vous êtes dans Android Studio):
Presse Cmd-Shift-A sur un Mac ou appuyez sur Ctrl-Shift-A sur une machine Windows.
Tapez l'action que vous cherchez: Kotlin Bytecode
et choisissez Show Kotlin Bytecode
dans le menu.
Decompile
en haut du panneau Kotlin Bytecode
.J'espère que cela t'aides.
Je compile Kotlin en code octet, puis je le décompile en Java. Je compile avec le compilateur Kotlin et décompile avec cfr .
Mon projet est ici .
Cela me permet de compiler ceci:
package functionsiiiandiiilambdas.functions.p01tailiiirecursive
tailrec fun findFixPoint(x: Double = 1.0): Double =
if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
Pour ça:
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);
}
}
Comme @ louis-cad a mentionné "source Kotlin -> code d'octet Java -> source Java" est la seule solution à ce jour.
Mais je voudrais mentionner le chemin que je préfère: utiliser décompilateur Jadx pour Android .
Cela permet de voir le code généré pour les fermetures et, comme pour moi, le code résultant est "plus propre" que celui du décompilateur IntelliJ IDEA.
Normalement, quand j'ai besoin de voir le code source Java de n'importe quelle classe Kotlin, je le fais:
./gradlew assembleDebug
jadx-gui ./app/build/outputs/apk/debug/app-debug.apk
Dans cette interface graphique, la fonctionnalité de base IDE fonctionne: recherche de classe, déclaration de clic à aller. etc.
De même, tout le code source pourrait être sauvegardé puis visualisé à l'aide d'autres outils comme IntelliJ IDEA.