Scala 尝试以列表作为参数反序列化对象时发生java.lang.ClassCastException

Scala 尝试以列表作为参数反序列化对象时发生java.lang.ClassCastException,scala,deserialization,classcastexception,Scala,Deserialization,Classcastexception,我试图序列化然后反序列化一个对象,该对象包含List[user defined class]作为参数。它不断抛出java.lang.ClassCastException。但是,当列表为Int或String时,代码可以工作。我认为在解决课堂问题时存在一些问题,但我无法解决它 object WriteTestObject { class A case class B (n:String) extends A class C case class D (args:Lis

我试图序列化然后反序列化一个对象,该对象包含List[user defined class]作为参数。它不断抛出java.lang.ClassCastException。但是,当列表为Int或String时,代码可以工作。我认为在解决课堂问题时存在一些问题,但我无法解决它

object WriteTestObject {
    class A
    case class B (n:String) extends A
    class C
    case class D (args:List[B]) extends C
    def main(args: Array[String]) ={
        val x = B("some String")
        val y = D(List(x))
        val oos = new ObjectOutputStream(new FileOutputStream("out.txt"))
        oos.writeObject(y)
        oos.close()
        val ois = new ObjectInputStream(new FileInputStream("out.txt"))
        val ob = ois.readObject.asInstanceOf[B]
        print(ob)
        ois.close()

    }
 }
输出:

java.lang.ClassCastException:无法分配的实例 scala.collection.immutable.List$SerializationProxy to字段 中类型为scala.collection.immutable.List的WriteToObject$D.args WriteTestObject$D的实例


您应该将
ois.readObject.asInstanceOf[B]
更改为
ois.readObject.asInstanceOf[D]
我这样做了,但问题仍然存在。您能尝试一下这个解决方案吗?这似乎是Scala/Java错误。我可以在IntelliJ中使用scratch复制它,但在普通类或shell中不能。您应该将
ois.readObject.asInstanceOf[B]
更改为
ois.readObject.asInstanceOf[D]
我这样做了,但问题仍然存在。您能尝试一下这个解决方案吗?这似乎是Scala/Java错误。我可以在IntelliJ中使用scratch复制它,但在普通类或shell中都无法复制。