Mengonversi File Kotlin ke Java

1. Ikhtisar

Kotlin terkenal karena interoperabilitasnya dengan Java. Ini, tentu saja, mungkin karena keduanya berjalan di Java Virtual Machine - dengan kata lain, keduanya dikompilasi ke bytecode yang sama.

Dalam tutorial ini, kita akan mempelajari dua cara untuk melakukan konversi dari file Kotlin ke file Java.

2. Mengapa Mengonversi Kotlin ke Java?

Pertama, mari pertimbangkan beberapa alasan mengapa kami mungkin ingin melakukan konversi seperti itu:

  • Untuk memahami apa yang sebenarnya terjadi di bawah tenda
  • Untuk menyelidiki masalah kinerja
  • Untuk menyingkirkan Kotlin dari proyek kami

Konversi dari Kotlin ke Java membutuhkan dua langkah. Kita perlu mengkompilasi kode Kotlin ke bytecode JVM. Kemudian, kita perlu mendekompilasi hasilnya ke kode Java.

Namun, proses ini tidak akan pernah memberi kita kode produksi yang berfungsi dengan baik . Oleh karena itu, pekerjaan manual lebih lanjut biasanya dibutuhkan.

Di bagian selanjutnya, kita akan melihat lebih dekat pada dua metode untuk melakukan konversi.

3. Konversi Menggunakan Alat Baris Perintah

Katakanlah kita memiliki nama file Kotlin Sample.kt dengan konten berikut:

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

Pertama, mari kita kompilasi kode dengan perintah:

kotlinc Sample.kt

Hasilnya, file dengan nama SampleKt.class akan dibuat.

Sekarang, kita perlu mendekompilasi file ini ke Java .

Untuk melakukan ini, kami akan menggunakan FernFlower . Kita bisa mendapatkan fernflower.jar dengan mendownload proyek dan menjalankan build Gradle. Setelah kami memiliki file JAR, perintah yang akan dijalankan adalah:

java -jar fernflower.jar SampleKt.class .

Setelah itu, kita akan melihat 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; } } }

Seperti yang bisa kita lihat, kodenya cukup rumit . Selain itu, masih memiliki dependensi bahasa Kotlin. Kami mendapat potongan kode yang tidak berguna dalam produksi karena keterbacaan dan kinerja.

4. Konversi dengan IntelliJ IDEA

Dengan IntelliJ IDEA, kita dapat melakukan dua langkah yang sama dengan cara yang lebih nyaman.

Untuk mengompilasi sumber ke bytecode, mari klik Tools -> Kotlin -> Show Kotlin Bytecode dari menu konteks utama.

Sebuah kartu baru akan muncul dan kita seharusnya dapat melihat bytecode JVM dalam bentuk yang dapat dibaca manusia:

Dari sana, kita cukup mengklik tombol Decompile untuk menghasilkan file Java. Perhatikan bahwa IntelliJ IDEA menggunakan Fernflower di bawah kap, jadi file Java yang dihasilkan akan sama dengan yang ditunjukkan di atas.

5. Kesimpulan

Dalam tutorial singkat ini, kita telah mempelajari dua cara untuk mengonversi file Kotlin ke Java.

Kami juga membahas beberapa kasus di mana proses ini berguna dan mengapa kami harus menghindarinya untuk kode produksi.