Kotlin como pegamento: Integración con Java, Python, C y JS

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

Kotlin no vive en el vacío: por qué y cómo conectar con otros lenguajes

\n\n

Imagine: usted escribe en Kotlin, un lenguaje moderno, conciso y seguro. Pero su proyecto no es una pizarra en blanco. En algún lugar del sistema vive código heredado en Java, los analistas necesitan una biblioteca en Python y para operaciones de bajo nivel se requiere C. O quiere reutilizar la lógica de negocio en el frontend, escribiéndola en Kotlin, pero allí JavaScript es el que manda.

\n\n

La buena noticia: la integración de Kotlin con otros lenguajes no es un dolor, sino una superpotencia. Kotlin está diseñado para ser un "lenguaje pegamento". Puede funcionar en la JVM (junto a Java), compilarse a código nativo (Kotlin/Native) e incluso a JavaScript (Kotlin/JS).

\n\n

En este artículo, analizaremos cuatro escenarios clave de interacción de Kotlin con otros lenguajes con ejemplos prácticos. Aprenderá cómo llamar a Python desde Kotlin, incrustar código C a través de JNI, trabajar sin problemas con Java e incluso usar Kotlin en el frontend. ¡Allá vamos!

\n\n

1. Kotlin y Java: almas gemelas desde la primera línea

\n\n

El escenario más obvio y simple es la interacción Kotlin Java. Dado que Kotlin se compila a bytecode de la JVM, es 100% compatible con Java. Puede llamar a cualquier código Java desde Kotlin y viceversa, sin puentes, adaptadores ni dolor.

\n\n

Cómo llamar a Java desde Kotlin

\n

Supongamos que tiene una clase Java antigua para trabajar con fechas:

\n\n
// Java: DateUtils.java\npublic class DateUtils {\n    public static String formatDate(long timestamp) {\n        return new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date(timestamp));\n    }\n}\n
\n\n

En Kotlin lo usa como si fuera nativo:

\n\n
// Kotlin\nfun main() {\n    val formatted = DateUtils.formatDate(System.currentTimeMillis())\n    println("Hoy: $formatted") // Hoy: 2025-04-03\n}\n
\n\n

Todo funciona "de fábrica". Pero hay matices: la seguridad null. Java no conoce los tipos nullable de Kotlin, por lo que al llamar a métodos Java, Kotlin trata los valores devueltos como tipos de plataforma (por ejemplo, String!). Consejo: siempre especifique explícitamente el tipo o use !! / ?. con criterio.

\n\n

Cómo llamar a Kotlin desde Java

\n

La compatibilidad inversa también existe. Supongamos que tiene un archivo Kotlin:

\n\n
// Kotlin: Calculator.kt\npackage utils\n\nobject Calculator {\n    @JvmStatic\n    fun sum(a: Int, b: Int): Int = a + b\n}\n
\n\n

Desde Java lo llamamos así:

\n\n
// Java\nimport utils.Calculator;\n\npublic class Main {\n    public static void main(String[] args) {\n        int result = Calculator.sum(5, 3);\n        System.out.println(result); // 8\n    }\n}\n
\n\n

Lo principal es no olvidar la anotación @JvmStatic para métodos estáticos y @JvmName para resolver conflictos de nombres. La integración de Kotlin con Java es tan estrecha que puede mezclar ambos lenguajes en un mismo proyecto; esto es un estándar para el desarrollo de Android y muchos backends con Spring.

\n\n

2. Kotlin y Python: dos mundos, una JVM (y GraalVM)

\n\n

Esto ya es más interesante. Kotlin Python no es el vínculo más trivial, pero es posible. No hay un puente nativo directo, pero podemos usar soluciones basadas en JVM.

\n\n

Opción A: GraalVM — ejecutamos Python en la JVM

\n

GraalVM es una máquina virtual que puede ejecutar varios lenguajes (Java, Kotlin, JavaScript, Python, Ruby) en un solo proceso. Es la herramienta ideal para la integración de Kotlin con Python.

\n\n

Instale GraalVM y agregue soporte para Python:

\n\n
gu install python\n
\n\n

Ahora, en el código Kotlin se pueden llamar funciones de Python:

\n\n
// Kotlin (GraalVM Polyglot API)\nimport org.graalvm.polyglot.*\n\nfun main() {\n    val context = Context.create("python")\n    // Ejec                

Blogs

Book Recommendations