为了账号安全,请及时绑定邮箱和手机立即绑定

Scala 对象的序列化

Scala 对象的序列化

跃然一笑 2022-07-20 15:58:40
我正在关注scala object serialization 的基本示例。但是,在运行以下单元测试时package mytestimport java.io.{ByteArrayOutputStream, ObjectOutputStream}import org.scalatest.{Matchers, WordSpec}class BasicSerializationSpec extends WordSpec with Matchers {  @SerialVersionUID(123L)  class TestRecord(var content: String) extends Serializable {    override def toString = s"TestRecord($content)"  }  "A TestRecord" should {    "be serializable" in {      val oo = new ObjectOutputStream(new ByteArrayOutputStream())      val tr = new TestRecord("42")      oo.writeObject(tr)      oo.close    }  }}我得到一个例外:org.scalatest.Assertions$AssertionsHelper java.io.NotSerializableException:在 java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 在 java.io.ObjectOutputStream 的 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)。 writeSerialData(ObjectOutputStream.java:1509) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 在 java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java :1548) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 在 java .io。ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 在 mytest.BasicSerializationSpec.$anonfun$new$2(BasicSerializationSpec.scala:20)我试图明确设置类型val tr : java.io.Serializable = new TestRecord("42")但仍然没有运气。如何正确地将 scala 对象序列化为 java ObjectOutputStream?这不是其他堆栈答案的重复,因为我显然在扩展Serializable我的类声明。预先感谢您的考虑和回复。
查看完整描述

1 回答

?
慕仙森

TA贡献1827条经验 获得超8个赞

序列化内部类在 Java 和 Scala 中都是一个雷区,但是如果在您的真实代码中没有对 中BasicSerializationSpec的成员的引用TestRecord,您应该能够通过final在内部类定义中添加修饰符来完成这项工作:

final class TestRecord(var content: String) extends Serializable {

在实际代码中,您不太可能测试您在测试类中定义的类,但在测试内部类时可能会遇到类似情况。


查看完整回答
反对 回复 2022-07-20
  • 1 回答
  • 0 关注
  • 209 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号