¿Por qué convertir Kotlin a Java si Kotlin es el "nuevo Java"?
\n\nPodrí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\nEn 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.
1. Conversión directa: ¿mito o realidad?
\n\nAdvertimos 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()).
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
2. Método n.º 1: Descompilación con IntelliJ IDEA (el más fiable)
\n\nSi 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\nPaso 1. Abre el archivo Kotlin
\nSupongamos 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\nPaso 2. Inicia la descompilación
\nEn 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\nEsto es lo que el IDE mostrará para nuestro Person.kt:
// 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\nImportante: 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.
3. Método n.º 2: JADX — para Android sin código fuente
\n\nSi 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\nEjemplo: encontraste una clase con una corrutina en el APK. En Kotlin, podría verse