【发布时间】:2012-04-23 06:39:07
【问题描述】:
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 会话,bar 序列化前为 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
那么,为什么 bar.i 在这种情况下不是 1?
【问题讨论】:
-
你试过让 Foo 可序列化吗? (
public class Foo implements Serializable)。 -
我刚刚在我提供的测试用例中尝试过,并且有效。但是,这是一个简化的测试用例。在我的实际问题中,我无权访问 Java 代码,也无法添加“实现可序列化”。
标签: java scala serialization