IntelliJ 中的 Kotlin 多平台 JVM 类型不匹配

标签 kotlin kotlin-multiplatform

我有一个包含以下模块的项目:

  • 常见
  • common-js
  • common-jvm
  • 后端
  • 网络

我的想法是,我将我的共享 (kotlin) 代码(主要是模型)放在一起,这些代码可以使用最近引入的多平台支持在 kotlin 驱动的后端和 javascript 驱动的 Web 应用程序中使用。为此,我在 Intellij 中创建了一个新的多平台应用程序,并向其中添加了后端和 Web 模块。

公共(public)模块中的示例类:

data class Show(
    val id: Long,
    val type: ShowType,
    val title: String,
    var description: String? = null
)

后端是一个简单的 Spring Boot 应用程序。它依赖于 common-jvm 项目:

compile project(":common-jvm")

现在,当我运行 gradle bootRun 时,应用程序启动并正常工作。但是,当我尝试使用 IntelliJ 运行相同的应用程序时,我收到如下错误:

Error:(68, 26) Kotlin: Type mismatch: inferred type is kotlin.Long but java.lang.Long was expected
Error:(68, 65) Kotlin: Type mismatch: inferred type is kotlin.String! but java.lang.String was expected

在这一行中,我尝试使用 json 源中的数据创建 Show 模型的实例:

val movie = Show(json.get(id).asLong(), ShowType.MOVIE, json.get(movieTitle).asText())

我正在使用 Kotlin 1.2.10 和 Spring Boot 1.5.9.RELEASE。

谁知道这是什么原因造成的以及如何解决?我尝试将 -Xmulti-platform 放入后端模块的项目结构中的附加命令行参数中,但这也不起作用。

最佳答案

您需要将构建/运行操作委托(delegate)给 Gradle,因为目前不支持使用 IDEA 构建多平台项目。

Build > Build Tools > Gradle > Runner

关于IntelliJ 中的 Kotlin 多平台 JVM 类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48066754/

相关文章:

android - 无法在 MacBook M1 芯片上构建 Kotlin Multiplatform 移动项目

android - Kotlin 数据类,将一个数据类的字段值复制到具有相同字段的另一个数据类

java - 使用 kotlin 在菜单中制作可点击的链接

kotlin - Ktor 客户端身份验证功能不发送授权 header

带有 iOS : "Use of undeclared type ' KotlinCoroutineContext'"的 Kotlin 多平台

android - 无法确定任务 ':app:dokka' 的依赖关系

kotlin - Flux.collectList() 是否引入阻塞行为

function - 如何使用 Kotlin 将函数输出转换为 Unit

typescript - KotlinJS 生成的 npm 链接包

KMM iOS 中的 kotlin.native.concurrent.InvalidMutabilityException : mutation attempt of frozen kotlin. collections.HashMap@3ee0f08