Kotlin a Java: ¿cómo convertir archivos? Guía para desarrolladores

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Por qué convertir Kotlin a Java si Kotlin es el "nuevo Java"?

\n\n

Podría parecer una paradoja: escribes en Kotlin y luego quieres obtener código Java. ¿Por qué? En realidad, hay muchas situaciones. Puedes heredar un proyecto escrito en Kotlin, pero tu equipo aún no está listo para migrar a él. O estás aprendiendo Kotlin comparándolo con Java, una de las formas más efectivas. O quizás necesitas integrar una biblioteca de Kotlin en un proyecto Java antiguo y quieres entender cómo funciona exactamente un método en particular.

\n\n

En cualquier caso, la pregunta "How to convert a Kotlin source file to a Java source file" es una de las más populares en Stack Overflow (miles de visitas). Y hoy la analizaremos de principio a fin. Aprenderás cómo convertir oficialmente (a través de IntelliJ IDEA) y no oficialmente (mediante descompilación) un archivo .kt a .java, qué obstáculos te esperan y qué hacer si nada funciona.

\n\n

1. Conversión directa: ¿mito o realidad?

\n\n

Advertimos de inmediato: no existe una conversión inversa uno a uno de Kotlin a Java. Kotlin no es solo "azúcar" sobre Java; tiene su propia semántica: seguridad contra nulos, corrutinas, funciones de extensión, clases de datos. Java no conoce ese lujo. Por lo tanto, cualquier convertidor generará un código aproximado que a menudo se ve voluminoso y contiene llamadas a funciones internas de Kotlin (por ejemplo, Intrinsics.checkNotNullParameter()).

\n\n

Pero esto no significa que la tarea sea imposible. Hay tres enfoques principales:

\n\n
    \n
  • Descompilación de bytecode — el método más preciso, integrado en IntelliJ IDEA y Android Studio.
  • \n
  • JADX — para desarrolladores de Android, cuando no hay código fuente, solo un APK.
  • \n
  • Convertidores en línea — una opción rápida para fragmentos pequeños.
  • \n
\n\n

2. Método n.º 1: Descompilación con IntelliJ IDEA (el más fiable)

\n\n

Si tienes el archivo .kt original, puedes abrirlo en IntelliJ IDEA (o Android Studio) y pedirle al IDE que muestre el código Java equivalente. ¿Cómo hacerlo?

\n\n

Paso 1. Abre el archivo Kotlin

\n

Supongamos que tenemos una clase simple en Kotlin:

\n\n
// File: Person.kt\ndata class Person(val name: String, val age: Int) {\n    fun greet() = "Hello, my name is $name"\n}
\n\n

Paso 2. Inicia la descompilación

\n

En el menú de IntelliJ, selecciona Tools → Kotlin → Show Kotlin Bytecode. Se abrirá un panel con el bytecode. En ese panel, haz clic en el botón Decompile y verás la versión Java de tu archivo.

\n\n

Esto es lo que el IDE mostrará para nuestro Person.kt:

\n\n
// Descompilación Java\npublic final class Person {\n   @NotNull\n   private final String name;\n   private final int age;\n\n   @NotNull\n   public final String getName() {\n      return this.name;\n   }\n\n   public final int getAge() {\n      return this.age;\n   }\n\n   public Person(@NotNull String name, int age) {\n      Intrinsics.checkNotNullParameter(name, "name");\n      super();\n      this.name = name;\n      this.age = age;\n   }\n\n   @NotNull\n   public final String greet() {\n      return "Hello, my name is " + this.name;\n   }\n\n   // equals(), hashCode(), toString() — generados automáticamente\n}
\n\n

Importante: El código contiene llamadas a Intrinsics, que es parte del runtime de Kotlin. Si copias este código en un proyecto sin dependencias de Kotlin, no se compilará. Tendrás que agregar kotlin-stdlib o eliminar manualmente estas comprobaciones.

\n\n

3. Método n.º 2: JADX — para Android sin código fuente

\n\n

Si solo tienes un archivo APK y quieres entender cómo se implementa una clase Kotlin, usa JADX. Es un descompilador que convierte el bytecode DEX en código Java legible. Las clases Kotlin en un APK se compilan en bytecode JVM de todos modos, por lo que JADX puede manejarlo.

\n\n

Ejemplo: encontraste una clase con una corrutina en el APK. En Kotlin, podría verse

Blogs

Book Recommendations