Kotlin ne vit pas dans le vide : pourquoi et comment s'entendre avec d'autres langages
\n\nImaginez : vous écrivez en Kotlin — un langage moderne, concis et sûr. Mais votre projet n'est pas une page blanche. Quelque part dans les entrailles du système vit un code legacy en Java, les analystes ont besoin d'une bibliothèque en Python, et pour les opérations bas niveau, il faut du C. Ou vous voulez réutiliser la logique métier sur le frontend en l'écrivant en Kotlin, mais c'est JavaScript qui y règne.
\n\nBonne nouvelle : l'intégration de Kotlin avec d'autres langages n'est pas une douleur, mais un super-pouvoir. Kotlin est conçu pour être un « langage-colle ». Il sait fonctionner sur la JVM (aux côtés de Java), se compiler en code natif (Kotlin/Native) et même en JavaScript (Kotlin/JS).
\n\nDans cet article, nous allons analyser quatre scénarios clés d'interaction de Kotlin avec d'autres langages à travers des exemples pratiques. Vous apprendrez comment appeler Python depuis Kotlin, intégrer du code C via JNI, travailler de manière transparente avec Java et même utiliser Kotlin sur le frontend. C'est parti !
\n\n1. Kotlin et Java : une âme sœur dès les premières lignes
\n\nLe scénario le plus évident et le plus simple est l'interaction Kotlin Java. Puisque Kotlin se compile en bytecode JVM, il est compatible à 100% avec Java. Vous pouvez appeler n'importe quel code Java depuis Kotlin et vice versa — sans ponts, adaptateurs ni douleur.
\n\nComment appeler Java depuis Kotlin
\nSupposons que vous ayez une ancienne classe Java pour travailler avec les dates :
\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\nEn Kotlin, vous l'utilisez comme s'il était natif :
\n\n// Kotlin\nfun main() {\n val formatted = DateUtils.formatDate(System.currentTimeMillis())\n println("Aujourd'hui : $formatted") // Aujourd'hui : 2025-04-03\n}\n\n\nTout fonctionne « prêt à l'emploi ». Mais il y a des nuances : la sécurité null. Java ne connaît pas les types nullable de Kotlin, donc lors de l'appel de méthodes Java, Kotlin interprète les valeurs de retour comme des types de plateforme (par exemple, String!). Conseil : spécifiez toujours explicitement le type ou utilisez !! / ?. avec discernement.
Comment appeler Kotlin depuis Java
\nLa rétrocompatibilité existe aussi. Supposons que vous ayez un fichier 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\nDepuis Java, on appelle ainsi :
\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\nL'essentiel est de ne pas oublier l'annotation @JvmStatic pour les méthodes statiques et @JvmName pour résoudre les conflits de noms. L'intégration de Kotlin avec Java est si étroite que vous pouvez mélanger les deux langages dans un même projet — c'est la norme pour le développement Android et de nombreux backends Spring.
2. Kotlin et Python : deux mondes, une seule JVM (et GraalVM)
\n\nVoilà qui est plus intéressant. Kotlin Python n'est pas la combinaison la plus triviale, mais elle est possible. Il n'y a pas de pont natif direct, mais nous pouvons utiliser des solutions JVM.
\n\nOption A : GraalVM — exécuter Python sur la JVM
\nGraalVM est une machine virtuelle capable d'exécuter plusieurs langages (Java, Kotlin, JavaScript, Python, Ruby) dans un même processus. C'est l'outil idéal pour l'intégration de Kotlin avec Python.
\n\nInstallez GraalVM et ajoutez le support de Python :
\n\ngu install python\n\n\nMaintenant, dans le code Kotlin, vous pouvez appeler des fonctions Python :
\n\n// Kotlin (API Polyglot GraalVM)\nimport org.graalvm.polyglot.*\n\nfun main() {\n val context = Context.create("python")\n // Exéc