You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin Multiplatform Compose Desktop项目中启用Java与Kotlin混编

Kotlin Multiplatform Compose Desktop 中 Java 与 Kotlin 互操作实现及 Gradle 配置

一、Java 与 Kotlin 互操作实现

1. Kotlin 调用 Java 代码

Kotlin 在 JVM 平台上与 Java 天然兼容,无需额外配置即可直接调用:

  • 直接导入 Java 类到 Kotlin 文件,像使用 Kotlin 类一样调用,比如你项目中依赖的 sqlite-jdbc 库,可直接在 Kotlin 代码里实例化 SQLiteConnection 等类。
  • 第三方 Java 库或自定义 Java 模块,只要在依赖中声明,就能在 Kotlin 代码里正常调用。

2. Java 调用 Kotlin 代码

Java 调用 Kotlin 时需适配 Kotlin 特性,常用方式如下:

  • 顶层函数:Kotlin 顶层函数会自动生成「文件名Kt」格式的类(比如 Main.kt 中的顶层函数,Java 需通过 MainKt 类调用)。
  • 伴生对象成员:给伴生对象的方法加 @JvmStatic 注解,Java 可直接调用;给伴生对象的属性加 @JvmField 注解,Java 无需通过 getter/setter 直接访问。
  • 带默认参数的方法:添加 @JvmOverloads 注解后,Java 可通过重载形式调用不同参数组合。
  • Data Class:Kotlin 的 Data Class 在 Java 中可正常使用自动生成的 getter/setter,也能通过 componentN() 方法访问属性。

二、Gradle 配置调整(基于你的现有 gradle.kts)

你的项目已配置基础的 JVM 目标,补充以下细节即可完美支持互操作:

1. 确认 JVM 目标启用

你的 kotlin 块中已添加 jvm(),这是支持 JVM 平台互操作的核心,无需修改。

2. 依赖管理

引入第三方 Java 库或本地 Java 模块,直接在 jvmMain.dependencies 中声明即可,比如你已添加的:

implementation("org.xerial:sqlite-jdbc:3.51.0.0")

如果是本地 Java 模块,可使用 implementation(project(":your-java-module"))。

3. 源文件目录配置(可选)

默认情况下,Gradle 会自动识别 src/jvmMain/java 和 src/jvmMain/kotlin 目录下的 Java、Kotlin 文件,无需额外配置。若需自定义路径,可在 sourceSets 中修改:

kotlin {
    jvm()
    sourceSets {
        jvmMain {
            java.srcDirs("src/jvmMain/custom-java")
            kotlin.srcDirs("src/jvmMain/custom-kotlin")
        }
    }
}

4. 跨平台代码兼容(可选)

若要在 common 模块中调用 Java 代码,需使用 expect/actual 机制:

  • 在 commonMain 定义 expect 类或方法:
// commonMain
expect class JavaInteropHelper() {
    fun doSomething(): String
}
  • 在 jvmMain 用 actual 实现并调用 Java 代码:
// jvmMain
actual class JavaInteropHelper actual constructor() {
    actual fun doSomething(): String {
        return JavaUtils.someMethod() // 调用Java类的方法
    }
}

内容的提问来源于stack exchange,提问作者Sidnio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 01:40:16