将Kotlin文件转换为Java

Converting a Kotlin File to Java

1.概述

Kotlin以与Java的互操作性而闻名。当然,这是可行的,因为它们都在Java虚拟机上运行-换句话说,它们被编译为相同的字节码。

 data-wp-editing=

在本教程中,我们将探索两种方法来执行从Kotlin文件到Java文件的转换。

2.为什么要将Kotlin转换为Java?

首先,让我们考虑一下为什么要进行这种转换的几个原因:

  • 了解幕后的真实情况

  • 调查性能问题

  • 从我们的项目中摆脱Kotlin

  • 从Kotlin到Java的转换需要两个步骤。我们需要将Kotlin代码编译为JVM字节码。然后,我们需要将结果反编译为Java代码。

    但是,此过程永远不会给我们提供正确运行的生产代码。因此,通常需要进一步的手工工作。

    在下一节中,我们将仔细研究执行转换的两种方法。

    3.使用命令行工具进行转换

    假设我们有一个Kotlin文件名称Sample.kt,其内容如下:

    1
    2
    3
    4
    5
    fun printEvenNumbers() {
        for (i in 0..10 step 2) {
            println(i)
        }
    }

    首先,让我们使用以下命令编译代码:

    1
    kotlinc Sample.kt

    结果,将创建一个名称为SampleKt.class的文件。

    现在,我们需要将该文件反编译为Java。

    为此,我们将使用FernFlower。我们可以通过下载项目并运行Gradle构建来获取fernflower.jar。有了JAR文件后,要运行的命令是:

    1
    java -jar fernflower.jar SampleKt.class .

    之后,我们将看到文件SampleKt.java:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    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
    \u0000
    \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,我们可以更方便地完成相同的两个步骤。

    要将源代码编译为字节码,请从主上下文菜单中单击工具-> Kotlin->显示Kotlin字节码。

    将会出现一张新卡,并且我们应该能够以人类可读的形式看到JVM字节码:

     srcset=

    从那里,我们只需单击反编译按钮即可生成Java文件。请注意,IntelliJ IDEA在后台使用Fernflower,因此生成的Java文件将与上面显示的文件相同。

    5.结论

    在本快速教程中,我们学习了将Kotlin文件转换为Java的两种方法。

    我们还讨论了一些有用的过程,以及为什么在生产代码中应避免使用此过程。