KotlinファイルをJavaに変換する

1. 概要

KotlinはJavaとの相互運用性で有名です。 もちろん、これは両方ともJava仮想マシン上で実行されているため可能です。つまり、同じバイトコードにコンパイルされます。
 
link:/uploads/kotlin-java-decompile-1024x250-100x24.png%20100w []
このチュートリアルでは、KotlinファイルからJavaファイルへの変換を実行する2つの方法を検討します。

2. KotlinをJavaに変換する理由

まず、このような変換を行う理由をいくつか考えてみましょう。
  • 実際に何が起こっているのかを理解する

  • パフォーマンスの問題を調査するには

  • プロジェクトからKotlinを削除するには

  • KotlinからJavaへの変換には2つのステップが必要です。* KotlinコードをJVMバイトコードにコンパイルする必要があります。 次に、結果をJavaコードに逆コンパイルする必要があります。

    ただし、*このプロセスでは、適切に機能する製品コードが提供されることはありません*。 そのため、通常はさらに手作業が必要です。
    次のセクションでは、変換を実行する2つの方法について詳しく見ていきます。

3. コマンドラインツールを使用した変換

次の内容のKotlinファイル名_Sample.kt_があるとします。
fun printEvenNumbers() {
    for (i in 0..10 step 2) {
        println(i)
    }
}
まず、コマンドでコードをコンパイルしましょう:
kotlinc Sample.kt
その結果、_SampleKt.class_という名前のファイルが作成されます。
ここで、このファイルをJavaに*逆コンパイルする必要があります。
これを行うには、_https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine [FernFlower] _を使用します。 プロジェクトをダウンロードしてGradleビルドを実行すると、_fernflower.jar_を取得できます。 JARファイルを取得したら、実行するコマンドは次のとおりです。
java -jar fernflower.jar SampleKt.class .
その後、ファイル_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;
      }
   }
}
ご覧のとおり、*コードはかなり複雑です*。 さらに、Kotlin言語に依存しています。 読みやすさとパフォーマンスのために、本番では役に立たないコードを入手しました。

4. IntelliJ IDEAでの変換

IntelliJ IDEAを使用すると、同じ2つのステップをより便利な方法で実行できます。
ソースをバイトコードにコンパイルするには、メインコンテキストメニューから_ * Tools-> Kotlin-> Show Kotlin Bytecode * _をクリックします。
新しいカードが表示され、人間が読める形式のJVMバイトコードを確認できるはずです。
link:/uploads/intellij-decompile-1024x581-100x57.png%20100w []
そこから、単に_Decompile_ボタン*をクリックしてJavaファイルを生成します。 IntelliJ IDEAは内部でFernflowerを使用しているため、結果のJavaファイルは上記のファイルと同じになることに注意してください。

5. 結論

このクイックチュートリアルでは、KotlinファイルをJavaに変換する2つの方法を学びました。
また、このプロセスが役立ついくつかのケースと、本番コードでこのプロセスを避けるべき理由についても説明しました。