Kotlin commonMain和java.io.Serializable 问题
我在commonMain中有一个数据类(称为Kotlin commonMain和java.io.Serializable 问题,kotlin,serialization,kotlin-multiplatform,kotlinx.serialization,Kotlin,Serialization,Kotlin Multiplatform,Kotlinx.serialization,我在commonMain中有一个数据类(称为Person),我想从jvmMain以java.io.Serializable类型访问它 我有一个解决方案,如下所示,但我想知道这是否是最好的方法。我还发现这个库是存在的,但我不确定它是否是一个解决方案 当前代码和解决方案:预期类型和实际类型 虽然所需的DummyInterface可能有点无用,但此代码工作正常 // CommonMain expect interface Serializable data class Person(val name
Person
),我想从jvmMain以java.io.Serializable
类型访问它
我有一个解决方案,如下所示,但我想知道这是否是最好的方法。我还发现这个库是存在的,但我不确定它是否是一个解决方案
当前代码和解决方案:预期类型和实际类型
虽然所需的DummyInterface可能有点无用,但此代码工作正常
// CommonMain
expect interface Serializable
data class Person(val name: String) : Serializable
//jvmMain/kotlin/main.kt
趣味主线(args:Array){
//失败:“类型不匹配:推断的类型为Person,但应为可序列化”
val p1:java.io.Serializable=Person(“abc”)
println(p1)
}
我知道它为什么会因为类型不匹配而失败,但我希望kotlinx.serialization插件能够神奇地将接口java.io.Serializable添加到Person数据类中
问题:
kotlinx.serialization
并不是作为java.io.Serializable
抽象之类的东西开发的。它是一个纯kotlin序列化库,用于序列化/反序列化JSON
对象
是的,我认为你的第一种方法是正确的解决方案。
对于
Parcelize
,有一个类似的实现,您可以检查一下,它也在做同样的事情。kotlinx。序列化并不是作为java.io.Serializable
抽象或其他东西开发的。它是一个纯kotlin序列化库,用于序列化/反序列化JSON
对象
是的,我认为你的第一种方法是正确的解决方案。
对于Parcelize
,有一个类似的实现,您可以查看,它也在做同样的事情
// jsMain
interface DummyInterface
actual typealias Serializable = DummyInterface
//jvmMain
actual typealias Serializable = java.io.Serializable
fun main(args: Array<String>) {
val p1: java.io.Serializable = Person("abc")
println(p1)
}
// gradle.kotlin.kts
plugins {
application
kotlin("multiplatform") version "1.4.32"
kotlin("plugin.serialization") version "1.4.32"
}
repositories {
mavenCentral()
}
kotlin {
jvm {
compilations.all {
kotlinOptions.jvmTarget = "11"
}
withJava()
}
js(IR) {
binaries.executable()
browser {}
}
sourceSets {
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.1.0")
}
}
val jvmMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.1.0")
}
}
}
}
// commonMain/kotlin/Person.kt
import kotlinx.serialization.*
@Serializable
data class Person(val name: String)
// jvmMain/kotlin/main.kt
fun main(args: Array<String>) {
// Fails with: "Type mismatch: inferred type is Person but Serializable was expected"
val p1: java.io.Serializable = Person("abc")
println(p1)
}