Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin commonMain和java.io.Serializable 问题_Kotlin_Serialization_Kotlin Multiplatform_Kotlinx.serialization - Fatal编程技术网

Kotlin commonMain和java.io.Serializable 问题

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

我在commonMain中有一个数据类(称为
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是否也能够提供解决方案?如果是,我应该修改什么代码

  • 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)
    }