Conversione di un file Kotlin in Java

1. Panoramica

Kotlin è noto per la sua interoperabilità con Java. Questo è, ovviamente, possibile perché entrambi sono in esecuzione sulla Java Virtual Machine - in altre parole, sono compilati con lo stesso bytecode.

In questo tutorial, esploreremo due modi per eseguire una conversione da un file Kotlin a un file Java.

2. Perché convertire Kotlin in Java?

Innanzitutto, consideriamo alcuni motivi per cui potremmo voler eseguire una tale conversione:

  • Per capire cosa sta realmente succedendo sotto il cofano
  • Per esaminare i problemi di prestazioni
  • Per sbarazzarsi di Kotlin dal nostro progetto

La conversione da Kotlin a Java richiede due passaggi. Dobbiamo compilare il codice Kotlin nel bytecode JVM. Quindi, dobbiamo decompilare il risultato nel codice Java.

Tuttavia, questo processo non ci fornirà mai un codice di produzione funzionante correttamente . Pertanto, di solito è necessario ulteriore lavoro manuale.

Nelle sezioni successive, daremo uno sguardo più da vicino a due metodi per eseguire la conversione.

3. Conversione utilizzando gli strumenti della riga di comando

Supponiamo di avere un nome file Kotlin Sample.kt con il seguente contenuto:

fun printEvenNumbers() { for (i in 0..10 step 2) { println(i) } }

Per prima cosa, compiliamo il codice con il comando:

kotlinc Sample.kt

Di conseguenza, verrà creato un file con il nome SampleKt.class .

Ora dobbiamo decompilare questo file in Java .

Per fare questo, useremo FernFlower . Possiamo ottenere fernflower.jar scaricando il progetto ed eseguendo la build Gradle. Una volta che abbiamo il file JAR, il comando da eseguire è:

java -jar fernflower.jar SampleKt.class .

Dopodiché, vedremo il file SampleKt.java :

import kotlin.Metadata; import kotlin.ranges.IntProgression; import kotlin.ranges.IntRange; import kotlin.ranges.RangesKt; @Metadata( mv = {1, 1, 15}, bv = {1, 0, 3}, k = 2, d1 = {"\u0000\u0006\n\u0000\n\u0002\u0010\u0002\u001a\u0006\u0010\u0000\u001a\u00020\u0001"}, d2 = {"printEvenNumbers", ""} ) public final class SampleKt { public static final void printEvenNumbers() { byte var3 = 0; IntProgression var10000 = RangesKt.step((IntProgression)(new IntRange(var3, 10)), 2); int i = var10000.getFirst(); int var1 = var10000.getLast(); int var2 = var10000.getStep(); if (var2 >= 0) { if (i > var1) { return; } } else if (i < var1) { return; } while(true) { boolean var4 = false; System.out.println(i); if (i == var1) { return; } i += var2; } } }

Come possiamo vedere, il codice è piuttosto complicato . Inoltre, ha ancora dipendenze dalla lingua Kotlin. Abbiamo ottenuto un codice inutile in produzione a causa della leggibilità e delle prestazioni.

4. Conversione con IntelliJ IDEA

Con IntelliJ IDEA, possiamo eseguire gli stessi due passaggi in modo più conveniente.

Per compilare il codice sorgente in bytecode, fare clic su Strumenti -> Kotlin -> Mostra Kotlin Bytecode dal menu contestuale principale.

Apparirà una nuova scheda e dovremmo essere in grado di vedere il bytecode JVM in una forma leggibile dall'uomo:

Da lì, facciamo semplicemente clic sul pulsante Decompile per produrre un file Java. Nota che IntelliJ IDEA sta usando Fernflower sotto il cofano, quindi il file Java risultante sarà identico a quello mostrato sopra.

5. conclusione

In questo rapido tutorial, abbiamo imparato due modi per convertire un file Kotlin in Java.

Abbiamo anche discusso alcuni casi in cui questo processo è utile e perché dovremmo evitarlo per il codice di produzione.