Menukar Fail Kotlin ke Java

1. Gambaran keseluruhan

Kotlin terkenal dengan kebolehoperasiannya dengan Java. Ini, tentu saja, mungkin kerana kedua-duanya berjalan di Java Virtual Machine - dengan kata lain, mereka disusun ke kod bytec yang sama.

Dalam tutorial ini, kita akan meneroka dua cara untuk melakukan penukaran dari fail Kotlin ke fail Java.

2. Mengapa Menukar Kotlin ke Java?

Pertama, mari kita pertimbangkan beberapa sebab mengapa kita ingin melakukan penukaran seperti itu:

  • Untuk memahami apa yang sebenarnya sedang berlaku
  • Untuk menyiasat masalah prestasi
  • Untuk menyingkirkan Kotlin dari projek kami

Penukaran dari Kotlin ke Java memerlukan dua langkah. Kita perlu menyusun kod Kotlin ke kod bytec JVM. Kemudian, kita perlu menguraikan hasilnya ke kod Java.

Walau bagaimanapun, proses ini tidak akan memberi kita kod pengeluaran yang berfungsi dengan baik . Oleh itu, kerja manual lebih lanjut biasanya diperlukan.

Pada bahagian seterusnya, kita akan melihat lebih dekat dua kaedah untuk melakukan penukaran.

3. Penukaran Menggunakan Alat Baris Perintah

Katakan kita mempunyai nama fail Kotlin Sample.kt dengan kandungan berikut:

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

Pertama, mari menyusun kod dengan arahan:

kotlinc Sample.kt

Akibatnya, fail dengan nama SampleKt.class akan dibuat.

Sekarang, kita perlu menguraikan fail ini ke Java .

Untuk melakukan ini, kami akan menggunakan FernFlower . Kita boleh mendapatkan fernflower.jar dengan memuat turun projek dan menjalankan Gradle build. Setelah kita mempunyai fail JAR, perintah untuk dijalankan adalah:

java -jar fernflower.jar SampleKt.class .

Selepas itu, kita akan melihat fail 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 kita lihat, kodnya agak rumit . Tambahan lagi, ia masih mempunyai kebergantungan bahasa Kotlin. Kami mendapat sekeping kod yang tidak berguna dalam pengeluaran kerana kebolehbacaan dan prestasi.

4. Penukaran dengan IntelliJ IDEA

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

Untuk menyusun sumber ke kod bytec, mari klik Alat -> Kotlin -> Tunjukkan Kotlin Bytecode dari menu konteks utama.

Kad baru akan muncul dan kita seharusnya dapat melihat JVM bytecode dalam bentuk yang boleh dibaca oleh manusia:

Dari sana, kita cukup klik butang Dekompilasi untuk menghasilkan fail Java. Perhatikan bahawa IntelliJ IDEA menggunakan Fernflower di bawah tudung, jadi fail Java yang dihasilkan akan sama dengan yang ditunjukkan di atas.

5. Kesimpulan

Dalam tutorial ringkas ini, kami telah mempelajari dua cara untuk menukar fail Kotlin ke Java.

Kami juga membincangkan beberapa kes di mana proses ini berguna dan mengapa kita harus menghindarkannya untuk kod pengeluaran.