【发布时间】:2011-04-22 00:40:39
【问题描述】:
当使用 -Xcheckinit 编译器选项并在可序列化类中实现我自己的 readObject 方法时,我无法从 readObject 方法调用在类主体中声明的字段上的任何访问器函数。声明为构造函数参数的字段是可以的。当我尝试访问在类主体中声明的字段时,我得到一个 scala.UninitializedFieldError。
也就是说,下面的代码在readObject方法中的println(y)上失败了,即使在上一行设置了y之后!
@serializable case class XYPointWithRWAndPrint(var x: Int) {
var y = 0
@throws(classOf[java.io.IOException])
private def writeObject(out: java.io.ObjectOutputStream) {
out.writeInt(x)
out.writeInt(y)
}
@throws(classOf[java.io.IOException])
@throws(classOf[ClassNotFoundException])
private def readObject(in: java.io.ObjectInputStream) {
x = in.readInt()
println(x)
y = in.readInt()
println(y)
}
}
为什么?
【问题讨论】:
标签: serialization scala