📌  相关文章
📜  如何在Android Studio中将Kotlin代码转换为Java代码?

📅  最后修改于: 2021-05-10 15:44:47             🧑  作者: Mango

Java编程语言是Android应用程序开发中最古老,最喜欢的语言。但是,在Google I / O 2017期间,Kotlin已被Google Android团队宣布为Android开发的官方语言。 Kotlin由于其相似性以及与Java语言的互操作性而在开发人员中迅速流行。在设计一个Android项目时,可以将Java和Kotlin的代码混合在一起。 Java和Kotlin的语法在很多方面都不同,但是它们的编译过程几乎相同。两种语言的代码都被编译成可在Java虚拟机(JVM)上执行的字节码。因此,如果可以导出已编译的Kotlin文件的字节码,则可以对其进行反编译以生成等效的Java代码。 Android Studio所做的工作与从Kotlin到Java的代码转换完全相同。开发人员可能有很多理由将Kotlin代码转换为Java,例如:

  • 集成易于用Java语言实现的功能。
  • 解决一些在Kotlin中很难找到的性能问题。
  • 从项目文件中删除Kotlin代码。

在Android Studio中将Kotlin代码转换为Java代码

代码转换

第1步:打开Kotlin类/文件

打开要转换为Java的Kotlin类/文件。考虑下面提到的MainActivity文件的代码进行转换。

Kotlin
import android.os.Bundle
import android.view.View
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
  
class MainActivity : AppCompatActivity() {
    // declaring variable for TextView component
    private var textView: TextView? = null
  
    // declaring variable to store
    // the number of button click
    private var count = 0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // assigning ID of textView2 to the variable
        textView = findViewById(R.id.textView2)
  
        // initializing the value of count with 0
        count = 0
    }
  
    // function to perform operations
    // when button is clicked
    fun buttonOnClick(view: View?) {
        // increasing count by one on
        // each tap on the button
        count++
  
        // changing the value of the
        // textView with the current
        // value of count variable
        textView!!.text = Integer.toString(count)
    }
}


Java
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import kotlin.Metadata;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.Nullable;
  
@Metadata(
   mv = {1, 4, 1},
   bv = {1, 0, 3},
   k = 1,
   d1 = {"\u0000,\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\b\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\u0018\u00002\u00020\u0001B\u0005¢\u0006\u0002\u0010\u0002J\u0010\u0010\u0007\u001a\u00020\b2\b\u0010\t\u001a\u0004\u0018\u00010\nJ\u0012\u0010\u000b\u001a\u00020\b2\b\u0010\f\u001a\u0004\u0018\u00010\rH\u0014R\u000e\u0010\u0003\u001a\u00020\u0004X\u0082\u000e¢\u0006\u0002\n\u0000R\u0010\u0010\u0005\u001a\u0004\u0018\u00010\u0006X\u0082\u000e¢\u0006\u0002\n\u0000¨\u0006\u000e"},
   d2 = {"Lcom/example/javatokotlin/MainActivity;", "Landroidx/appcompat/app/AppCompatActivity;", "()V", "count", "", "textView", "Landroid/widget/TextView;", "buttonOnClick", "", "view", "Landroid/view/View;", "onCreate", "savedInstanceState", "Landroid/os/Bundle;", "app"}
)
public final class MainActivity extends AppCompatActivity {
   private TextView textView;
   private int count;
  
   protected void onCreate(@Nullable Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      this.setContentView(1300009);
      this.textView = (TextView)this.findViewById(1000069);
      this.count = 0;
   }
  
   public final void buttonOnClick(@Nullable View view) {
      int var10001 = this.count++;
      TextView var10000 = this.textView;
      Intrinsics.checkNotNull(var10000);
      var10000.setText((CharSequence)Integer.toString(this.count));
   }
}


第2步:导航到“工具”菜单

从Android Studio的最顶部工具栏中,选择工具,然后导航到Kotlin>显示Kotlin字节码。它将在右侧打开一个窗口,其中包含Kotlin文件的逐行字节码。

步骤3:反编译字节码

在字节码窗口中,选中选项“ JVM 8 target” ,然后单击“ Decompile”。 Android Studio将为Kotlin文件生成Java等效代码。产生的Java代码将包含一些其他信息,例如元数据。以下是上述Kotlin文件生成的Java代码。

Java

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import kotlin.Metadata;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.Nullable;
  
@Metadata(
   mv = {1, 4, 1},
   bv = {1, 0, 3},
   k = 1,
   d1 = {"\u0000,\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\b\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\u0018\u00002\u00020\u0001B\u0005¢\u0006\u0002\u0010\u0002J\u0010\u0010\u0007\u001a\u00020\b2\b\u0010\t\u001a\u0004\u0018\u00010\nJ\u0012\u0010\u000b\u001a\u00020\b2\b\u0010\f\u001a\u0004\u0018\u00010\rH\u0014R\u000e\u0010\u0003\u001a\u00020\u0004X\u0082\u000e¢\u0006\u0002\n\u0000R\u0010\u0010\u0005\u001a\u0004\u0018\u00010\u0006X\u0082\u000e¢\u0006\u0002\n\u0000¨\u0006\u000e"},
   d2 = {"Lcom/example/javatokotlin/MainActivity;", "Landroidx/appcompat/app/AppCompatActivity;", "()V", "count", "", "textView", "Landroid/widget/TextView;", "buttonOnClick", "", "view", "Landroid/view/View;", "onCreate", "savedInstanceState", "Landroid/os/Bundle;", "app"}
)
public final class MainActivity extends AppCompatActivity {
   private TextView textView;
   private int count;
  
   protected void onCreate(@Nullable Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      this.setContentView(1300009);
      this.textView = (TextView)this.findViewById(1000069);
      this.count = 0;
   }
  
   public final void buttonOnClick(@Nullable View view) {
      int var10001 = this.count++;
      TextView var10000 = this.textView;
      Intrinsics.checkNotNull(var10000);
      var10000.setText((CharSequence)Integer.toString(this.count));
   }
}

Java优于Kotlin的优势

  • 操作员超载是不可能的。
  • 默认情况下,用Java编写的类未设置为final。
  • 更具可读性的语法。
  • 使用静态方法和变量。
想要一个节奏更快,更具竞争性的环境来学习Android的基础知识吗?
单击此处,前往由我们的专家精心策划的指南,以使您立即做好行业准备!