Kotlin lebt nicht im Vakuum: Warum und wie man sich mit anderen Sprachen anfreundet
\n\nStellen Sie sich vor: Sie schreiben in Kotlin – einer modernen, prägnanten und sicheren Sprache. Aber Ihr Projekt ist kein unbeschriebenes Blatt. Irgendwo in den Tiefen des Systems lebt Legacy-Code in Java, die Analysten brauchen eine Bibliothek in Python, und für Low-Level-Operationen wird C benötigt. Oder Sie möchten Geschäftslogik im Frontend wiederverwenden, indem Sie sie in Kotlin schreiben, aber dort regiert JavaScript.
\n\nDie gute Nachricht: Integration von Kotlin mit anderen Sprachen ist kein Schmerz, sondern eine Superkraft. Kotlin ist so konzipiert, dass es eine "Klebstoff-Sprache" ist. Es kann auf der JVM (neben Java) arbeiten, in nativen Code (Kotlin/Native) und sogar in JavaScript (Kotlin/JS) kompilieren.
\n\nIn diesem Artikel werden wir vier Schlüsselszenarien der Interaktion von Kotlin mit anderen Sprachen anhand praktischer Beispiele durchgehen. Sie erfahren, wie Sie Python aus Kotlin aufrufen, C-Code über JNI einbetten, nahtlos mit Java arbeiten und Kotlin sogar im Frontend einsetzen können. Los geht's!
\n\n1. Kotlin und Java: Seelenverwandte von der ersten Zeile an
\n\nDas offensichtlichste und einfachste Szenario ist die Kotlin Java Interaktion. Da Kotlin in JVM-Bytecode kompiliert wird, ist es zu 100% mit Java kompatibel. Sie können jeden Java-Code aus Kotlin aufrufen und umgekehrt – ohne Brücken, Adapter und Schmerz.
\n\nWie man Java aus Kotlin aufruft
\nAngenommen, Sie haben eine alte Java-Klasse für die Arbeit mit Daten:
\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\nIn Kotlin verwenden Sie sie wie eine eigene:
\n\n// Kotlin\nfun main() {\n val formatted = DateUtils.formatDate(System.currentTimeMillis())\n println("Heute: $formatted") // Heute: 2025-04-03\n}\n\n\nAlles funktioniert "out of the box". Aber es gibt Nuancen: null-Sicherheit. Java kennt keine nullable-Typen von Kotlin, daher behandelt Kotlin beim Aufruf von Java-Methoden die Rückgabewerte als Plattformtypen (z.B. String!). Tipp: Geben Sie immer explizit den Typ an oder verwenden Sie !! / ?. mit Bedacht.
Wie man Kotlin aus Java aufruft
\nDie Rückwärtskompatibilität ist ebenfalls gegeben. Nehmen wir an, Sie haben eine Kotlin-Datei:
\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\nAus Java rufen wir so auf:
\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\nWichtig ist, die Annotation @JvmStatic für statische Methoden und @JvmName zur Auflösung von Namenskonflikten nicht zu vergessen. Die Integration von Kotlin mit Java ist so eng, dass Sie beide Sprachen in einem Projekt mischen können – das ist Standard für die Android-Entwicklung und viele Backends auf Spring.
2. Kotlin und Python: Zwei Welten, eine JVM (und GraalVM)
\n\nDas ist schon interessanter. Kotlin Python ist nicht die trivialste Kombination, aber sie ist möglich. Es gibt keine direkte native Brücke, aber wir können JVM-Lösungen nutzen.
\n\nVariante A: GraalVM – Python auf der JVM ausführen
\nGraalVM ist eine virtuelle Maschine, die mehrere Sprachen (Java, Kotlin, JavaScript, Python, Ruby) in einem Prozess ausführen kann. Es ist das ideale Werkzeug für die Integration von Kotlin mit Python.
\n\nInstallieren Sie GraalVM und fügen Sie Python-Unterstützung hinzu:
\n\ngu install python\n\n\nJetzt können Sie in Kotlin-Code Python-Funktionen aufrufen:
\n\n// Kotlin (GraalVM Polyglot API)\nimport org.graalvm.polyglot.*\n\nfun main() {\n val context = Context.create("python")\n // Ausf