kotlin-convert-to-java
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つの方法を学びました。
また、このプロセスが役立ついくつかのケースと、本番コードでこのプロセスを避けるべき理由についても説明しました。