Kotlin não vive no vácuo: por que e como se integrar com outras linguagens
\n\nImagine: você está programando em Kotlin — uma linguagem moderna, concisa e segura. Mas seu projeto não é uma folha em branco. Em algum lugar nos recônditos do sistema existe código legado em Java, os analistas precisam de uma biblioteca em Python e, para operações de baixo nível, é necessário C. Ou você quer reutilizar a lógica de negócios no frontend, escrevendo-a em Kotlin, mas lá quem manda é o JavaScript.
\n\nA boa notícia: a integração do Kotlin com outras linguagens não é um problema, é um superpoder. O Kotlin foi projetado para ser uma "linguagem-cola". Ele funciona na JVM (junto com Java), compila para código nativo (Kotlin/Native) e até para JavaScript (Kotlin/JS).
\n\nNeste artigo, vamos analisar quatro cenários-chave de interação do Kotlin com outras linguagens com exemplos práticos. Você aprenderá como chamar Python a partir do Kotlin, incorporar código C via JNI, trabalhar perfeitamente com Java e até usar Kotlin no frontend. Vamos lá!
\n\n1. Kotlin e Java: almas gêmeas desde as primeiras linhas
\n\nO cenário mais óbvio e simples é a interação Kotlin Java. Como o Kotlin compila para bytecode da JVM, ele é 100% compatível com Java. Você pode chamar qualquer código Java do Kotlin e vice-versa — sem pontes, adaptadores ou dor.
\n\nComo chamar Java a partir do Kotlin
\nSuponha que você tenha uma classe Java antiga para trabalhar com datas:
\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\nEm Kotlin, você a usa como se fosse nativa:
\n\n// Kotlin\nfun main() {\n val formatted = DateUtils.formatDate(System.currentTimeMillis())\n println("Hoje: $formatted") // Hoje: 2025-04-03\n}\n\n\nTudo funciona "de fábrica". Mas há nuances: segurança contra null. O Java não conhece os tipos anuláveis do Kotlin, portanto, ao chamar métodos Java, o Kotlin trata os valores retornados como tipos de plataforma (por exemplo, String!). Dica: sempre especifique o tipo explicitamente ou use !! / ?. com sabedoria.
Como chamar Kotlin a partir do Java
\nA compatibilidade reversa também existe. Suponha que você tenha um arquivo 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\nDo Java, chamamos assim:
\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\nO principal é não esquecer a anotação @JvmStatic para métodos estáticos e @JvmName para resolver conflitos de nomes. A integração do Kotlin com Java é tão estreita que você pode misturar ambas as linguagens em um mesmo projeto — isso é padrão no desenvolvimento Android e em muitos backends com Spring.
2. Kotlin e Python: dois mundos, uma JVM (e GraalVM)
\n\nAgora isso é mais interessante. Kotlin Python não é a combinação mais trivial, mas é possível. Não existe uma ponte nativa direta, mas podemos usar soluções baseadas em JVM.
\n\nOpção A: GraalVM — executando Python na JVM
\nGraalVM é uma máquina virtual que pode executar várias linguagens (Java, Kotlin, JavaScript, Python, Ruby) em um único processo. É a ferramenta ideal para a integração do Kotlin com Python.
\n\nInstale o GraalVM e adicione suporte a Python:
\n\ngu install python\n\n\nAgora, no código Kotlin, você pode chamar funções Python:
\n\n// Kotlin (GraalVM Polyglot API)\nimport org.graalvm.polyglot.*\n\nfun main() {\n val context = Context.create("python")\n // Exec