J'ai un fichier source Kotlin, mais je veux le traduire en Java.
Comment convertir Kotlin en source Java?
J'ai un fichier source Kotlin, mais je veux le traduire en Java.
Comment convertir Kotlin en source Java?
Réponses:
Comme l'a dit @Vadzim, dans IntelliJ ou Android Studio, il vous suffit de faire ce qui suit pour obtenir le code java de kotlin:
Menu > Tools > Kotlin > Show Kotlin Bytecode
Decompile
boutonMise à jour:
Avec une version récente (1.2+) du plugin Kotlin, vous pouvez également le faire directement Menu > Tools > Kotlin -> Decompile Kotlin to Java
.
Decompile Kotlin to Java
n'est actuellement activé que pour les classes Kotlin compilées .
Vous pouvez compiler Kotlin en bytecode, puis utiliser un désassembleur Java.
La décompilation peut être effectuée dans IntelliJ Idea, ou en utilisant FernFlower https://github.com/fesh0r/fernflower (merci @Jire)
Il n'y avait pas d'outil automatisé car j'ai vérifié il y a quelques mois (et aucun plan pour un AFAIK)
Pour convertir un
Kotlin
fichier source en fichierJava
source, vous devez (lorsque vous dans Android Studio):
Appuyez sur Cmd- Shift- Asur un Mac, ou appuyez sur Ctrl- Shift- Asur une machine Windows.
Tapez l'action que vous recherchez: Kotlin Bytecode
et choisissez Show Kotlin Bytecode
dans le menu.
Decompile
sur le bouton en haut du Kotlin Bytecode
panneau.Je compile Kotlin en code octet puis décompile cela 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 l'a mentionné, "la source Kotlin -> le code d'octet Java -> la source Java" est la seule solution à ce jour.
Mais je voudrais mentionner la voie que je préfère: utiliser le décompilateur Jadx pour Android .
Il 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 de base, la fonctionnalité IDE fonctionne: recherche de classe, déclaration click to go. etc.
De plus, tout le code source pourrait être enregistré puis visualisé à l'aide d'autres outils comme IntelliJ IDEA.
brew install jadx
Java et Kotlin s'exécutent sur Java Virtual Machine (JVM).
La conversion d'un fichier Kotlin en fichier Java implique deux étapes, à savoir la compilation du code Kotlin en bytecode JVM puis décompiler le bytecode en code Java.
Étapes pour convertir votre fichier source Kotlin en fichier source Java: