如何将kotlin源文件转换为java源文件

act*_*cay 350 java code-conversion kotlin

我有一个Kotlin源文件,但我想把它翻译成Java.

如何将Kotlin转换为Java源代码?

Lou*_*CAD 353

正如@Vadzim所说,在IntelliJ或Android Studio中,您只需执行以下操作即可从kotlin获取Java代码:

  1. Menu > Tools > Kotlin > Show Kotlin Bytecode
  2. 单击Decompile按钮
  3. 复制java代码

更新:

使用最新版本(1.2+)的Kotlin插件,您也可以直接使用Menu > Tools > Kotlin -> Decompile Kotlin to Java.

  • Java输出不丑吗? (53认同)
  • @Pacerier就像大多数反编译输出一样,它当然是 (18认同)
  • 该选项未启用,它显示为灰色.我该如何启用它. (18认同)
  • @VikasPandey,`Decompile Kotlin to Java`目前仅针对[编译的Kotlin类]启用(/sf/answers/3672348641/). (7认同)
  • 从kotlin转换为java.但它显示了额外的代码.我甚至从未写过或听过的代码 (4认同)
  • @nauman因为你写了Kotlin代码,而不是Java.Kotlin功能依赖于字节码,并不一定像您期望的那样转换为Java.还有额外的检查,主要是可空性,以及合成方法和领域. (4认同)
  • 将字节码从另一种语言反编译为Java可能会生成无效或误导性代码。Kotlin生成的模式可能无法在Java中正确显示。这将使您对代码有所了解,但不能一字不漏。 (2认同)

vod*_*dan 38

您可以将Kotlin编译为字节码,然后使用Java反汇编程序.

反编译可以在InteliJ Idea内部完成,也可以使用FernFlower https://github.com/fesh0r/fernflower(感谢@Jire)

我几个月前检查过没有自动化工具(并且没有一个AFAIK的计划)

  • IntelliJ IDEA 2016.2:菜单/工具/ Kotlin /显示Kotlin字节码,然后单击"反编译"按钮 (4认同)
  • 这就是我讲的http://stackoverflow.com/questions/34762029/getting-incompatible-types-error-when-using-code-generated-from-a-kotlin-data (3认同)
  • 作为旁注,请注意生成的代码中的泛型可能会导致编译器警告,因为Kotlin允许java编译器没有的东西.但它仍然可以在字节码中工作. (2认同)

Ras*_*iri 18

你可以去工具> Kotlin>显示kotlin字节码

在此输入图像描述

在此输入图像描述

在此输入图像描述


Ale*_*lex 6

正如@louis-cad 提到的,“Kotlin 源代码 -> Java 的字节码 -> Java 源代码”是目前唯一的解决方案。

但我想提一下我更喜欢的方式:使用Jadx decompiler for Android

它允许查看闭包的生成代码,对我而言,生成的代码比 IntelliJ IDEA 反编译器中的代码“更干净”。

通常,当我需要查看任何 Kotlin 类的 Java 源代码时,我会这样做:

  • 生成apk: ./gradlew assembleDebug
  • 使用 Jadx GUI 打开 apk: jadx-gui ./app/build/outputs/apk/debug/app-debug.apk

在此 GUI 中,基本 IDE 功能起作用:类搜索、单击以进行声明。等等。

还可以保存所有源代码,然后使用 IntelliJ IDEA 等其他工具查看。


Tom*_*rre 5

我将Kotlin编译为字节码,然后将其反编译为Java。我使用Kotlin编译器进行编译,并使用cfr进行反编译。

我的项目在这里

这使我可以编译:

package functionsiiiandiiilambdas.functions.p01tailiiirecursive

tailrec fun findFixPoint(x: Double = 1.0): Double =
        if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
Run Code Online (Sandbox Code Playgroud)

对此:

package functionsiiiandiiilambdas.functions.p01tailiiirecursive;

public final class ExampleKt {
  public static final double findFixPoint(double x) {
    while (x != Math.cos(x)) {
      x = Math.cos(x);
    }
    return x;
  }

  public static /* bridge */ /* synthetic */ double findFixPoint$default(
      double d, int n, Object object) {
    if ((n & 1) != 0) {
      d = 1.0;
    }
    return ExampleKt.findFixPoint(d);
  }
}
Run Code Online (Sandbox Code Playgroud)


ARG*_*Geo 5

要将Kotlin源文件转换为源文件,Java您需要(在Android Studio中):

  1. 新闻Cmd- Shift- A在Mac上,或按Ctrl- Shift- A在Windows机器上。 在此处输入图片说明

  2. 输入您要查找的操作:,Kotlin Bytecode然后Show Kotlin Bytecode从菜单中选择。

在此处输入图片说明

  1. 按面板Decompile顶部的按钮Kotlin Bytecode

在此处输入图片说明

  1. 现在,在相邻的选项卡中,您将获得反编译的Java文件以及Kotlin文件:

在此处输入图片说明

希望这可以帮助。

  • 谢谢你,先生!这个有缺陷的 AS 再次更改了普通工具(工具 > Kotlin > ...)。 (3认同)