Scala 尝试以列表作为参数反序列化对象时发生java.lang.ClassCastException
我试图序列化然后反序列化一个对象,该对象包含List[user defined class]作为参数。它不断抛出java.lang.ClassCastException。但是,当列表为Int或String时,代码可以工作。我认为在解决课堂问题时存在一些问题,但我无法解决它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
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中都无法复制。