序列化扩展Java类的Scala类:值丢失了吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了序列化扩展Java类的Scala类:值丢失了吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1385字,纯文字阅读大概需要2分钟。
内容图文
![序列化扩展Java类的Scala类:值丢失了吗?](/upload/InfoBanner/zyjiaocheng/808/81738b6f84e6424f909c29b952173c24.jpg)
Foo.java
public class Foo{
public int i = 0;
}
Bar.scala
class Bar() extends Foo with Serializable{
i = 1
}
通过Josh Seureth https://stackoverflow.com/a/3442574/390708进行序列化
import java.io._
class Serialization{
def write(x : AnyRef) {
val output = new ObjectOutputStream(new FileOutputStream("test.obj"))
output.writeObject(x)
output.close()
}
def read[A] = {
val input = new ObjectInputStream(new FileInputStream("test.obj"))
val obj = input.readObject()
input.close()
obj.asInstanceOf[A]
}
}
REPL会话,序列化之前的条形码是1,但是之后是0.
scala -cp .
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_03).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val bar = new Bar
bar: Bar = Bar@2d2ab673
scala> bar.i
res0: Int = 1
scala> :load Serialization.scala
Loading Serialization.scala...
import java.io._
defined class Serialization
scala> val serialization = new Serialization
serial: Serialization = Serialization@41a45f89
scala> serialization.write(bar)
scala> val bars = serialization.read[Bar]
bars: Bar = Bar@5a9948fd
scala> bars.i
res3: Int = 0
那么,为什么在这种情况下不是bars.i 1?
解决方法:
这是预期的,我相信与Scala无关.非序列化超类未被序列化(因为它们不可序列化!)因此它们的值将由默认构造函数初始化.
如果您想以某种方式保存超类,则需要覆盖readObject和writeObject以手动保存状态.或者,使用更灵活的序列化解决方案来编写XML,JSON等并使用反射.
内容总结
以上是互联网集市为您收集整理的序列化扩展Java类的Scala类:值丢失了吗?全部内容,希望文章能够帮你解决序列化扩展Java类的Scala类:值丢失了吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。