簡體   English   中英

如何將 Kotlin 源文件轉換為 Java 源文件

[英]How to convert a Kotlin source file to a Java source file

我有一個 Kotlin 源文件,但我想將它翻譯成 Java。

如何將 Kotlin 轉換為 Java 源代碼?

正如@Vadzim 所說,在 IntelliJ 或 Android Studio 中,您只需執行以下操作即可從 kotlin 獲取 Java 代碼:

  1. Menu > Tools > Kotlin > Show Kotlin Bytecode
  2. 點擊Decompile按鈕
  3. 復制java代碼

更新:

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

您可以將 Kotlin 編譯為字節碼,然后使用 Java 反匯編器。

反編譯可以在 IntelliJ Idea 中完成,也可以使用 FernFlower https://github.com/fesh0r/fernflower (感謝 @Jire)

幾個月前我檢查過,沒有自動化工具(並且沒有一個 AFAIK 的計划)

您可以轉到工具 > Kotlin > 顯示 kotlin 字節碼

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

要將Kotlin源文件轉換為Java源文件,您需要(在 Android Studio 中時):

  1. 在 Mac 上按Cmd - Shift - A ,或在 Windows 機器上按Ctrl - Shift - A。

  2. 輸入您要查找的操作: Kotlin Bytecode並從菜單中選擇Show Kotlin Bytecode

在此處輸入圖片說明

  1. Kotlin Bytecode面板頂部的Decompile按鈕。

在此處輸入圖片說明

  1. 現在,您將在相鄰選項卡中獲得一個反編譯的 Java 文件和 Kotlin 文件:

在此處輸入圖片說明

我將 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))

對此:

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);
  }
}

正如@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 等其他工具查看。

  1. 在android studio中打開kotlin文件
  2. 轉到工具 -> kotlin -> kotlin 字節碼
  3. 在 kotlin 文件旁邊打開的新窗口中,單擊反編譯按鈕。 它將創建相當於您的 kotlin 文件的 java。

Java 和 Kotlin 在 Java 虛擬機 (JVM) 上運行。

將 Kotlin 文件轉換為 Java 文件涉及兩個步驟,即將 Kotlin 代碼編譯為 JVM 字節碼,然后將字節碼反編譯為 Java 代碼。

將 Kotlin 源文件轉換為 Java 源文件的步驟:

  1. 在 Android Studio 中打開您的 Kotlin 項目。
  2. 然后導航到工具 -> Kotlin -> 顯示 Kotlin 字節碼。

在此處輸入圖片說明

  1. 您將獲得 Kotin 文件的字節碼。
  2. 現在單擊 Decompile 按鈕從字節碼中獲取您的 Java 代碼

我不敢相信沒有人提到本地歷史記錄 :默認情況下,IDEA將保留文件更改歷史記錄。

在將文件轉換為Kotlin之前,要完全恢復文件的樣子,請執行以下操作:

對於您要還原的每個文件:

  • 打開查找動作(在Mac上為Command-Shift-A)
  • 搜索“本地歷史”
  • 按Enter鍵兩次(一次在搜索結果中接受“本地歷史記錄”,然后再一次在“本地歷史記錄”菜單中選擇“顯示歷史記錄”)
  • 在左側列表中找到“將文件從Java轉換為Kotlin”
  • 右鍵單擊它,然后選擇“還原”

如果您幾個月前就這樣做了(因為本地歷史記錄不是VCS),那么這可能就行不通了,例如,它不能重新創建您使用Kotlin添加的任何方法,但是對我有用。

我有一個Kotlin源文件,但是我想將其轉換為Java。

如何將Kotlin轉換為Java源代碼?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM