Konverzia súboru Kotlin na Javu

1. Prehľad

Kotlin je známy svojou interoperabilitou s Javou. To je samozrejme možné, pretože obe pracujú na Java Virtual Machine - inými slovami, sú kompilované do rovnakého bajtkódu.

V tomto tutoriále preskúmame dva spôsoby vykonania prevodu zo súboru Kotlin na súbor Java.

2. Prečo prevádzať Kotlin na Javu?

Najprv zvážime niekoľko dôvodov, prečo by sme mohli chcieť urobiť takúto konverziu:

  • Aby sme pochopili, čo sa vlastne deje pod kapotou
  • Vyšetriť problémy s výkonom
  • Aby sme sa zbavili Kotlina z nášho projektu

Konverzia z Kotlin na Java si vyžaduje dva kroky. Musíme skompilovať Kotlinov kód do bytecode JVM. Potom musíme výsledok dekompilovať na kód Java.

Avšak tento proces nám nikdy nedá správne fungujúci produkčný kód. Preto je zvyčajne potrebná ďalšia manuálna práca.

V ďalších častiach sa bližšie pozrieme na dva spôsoby uskutočnenia prevodu.

3. Konverzia pomocou nástrojov príkazového riadku

Povedzme, že máme názov súboru Kotlin Sample.kt s nasledujúcim obsahom:

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

Najskôr zostavme kód pomocou príkazu:

kotlinc Sample.kt

Výsledkom je súbor s menom SampleKt.trieda sa vytvorí.

Teraz musíme dekompilovať tento súbor na Javu.

K tomu použijeme FernFlower. Môžeme dostať fernflower.jar stiahnutím projektu a spustením zostavy Gradle. Akonáhle máme súbor JAR, príkaz na spustenie je:

java -jar fernflower.jar SampleKt.class.

Potom uvidíme súbor 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 "," "}) verejná konečná trieda 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) {návrat; }} else if (i <var1) {return; } while (true) {boolean var4 = false; System.out.println (i); if (i == var1) {návrat; } i + = var2; }}}

Ako vidíme, kód je dosť komplikovaný. Ďalej má stále jazykové závislosti Kotlin. Získali sme kúsok kódu, ktorý je z dôvodu čitateľnosti a výkonu nepoužiteľný na výrobu.

4. Konverzia pomocou IntelliJ IDEA

S programom IntelliJ IDEA môžeme rovnaké dva kroky urobiť pohodlnejším spôsobom.

Ak chceme zdroj skompilovať do bajtkódu, klikneme Nástroje -> Kotlin -> Zobraziť Kotlin Bytecode z hlavnej kontextovej ponuky.

Objaví sa nová karta a mali by sme vidieť bytový kód JVM v podobe čitateľnej pre človeka:

Odtiaľ sme jednoducho kliknite na ikonu Dekompilovať tlačidlo na vytvorenie súboru Java. Upozorňujeme, že IntelliJ IDEA používa pod kapotou Fernflower, takže výsledný súbor Java bude identický so súborom uvedeným vyššie.

5. Záver

V tomto rýchlom výučbe sme sa naučili dva spôsoby prevodu súboru Kotlin na jazyk Java.

Diskutovali sme tiež o niekoľkých prípadoch, keď je tento proces užitočný a prečo by sme sa mu mali vyhnúť pre produkčný kód.


$config[zx-auto] not found$config[zx-overlay] not found