【发布时间】:2019-03-28 17:12:55
【问题描述】:
在scala中,我认为对象的一个字段在序列化时会是静态的,不会被序列化, 但如果该字段不可序列化,则会得到 NotSerializableException。 为什么 ?类似的java代码就可以了。
下面是一个简单的例子。
谢谢
Scala 代码:
package test
import java.io._
import java.util
object AStudent extends Serializable {
var name="Jack"
val map=new util.WeakHashMap
}
object SerializationDemo extends App {
val oos = new ObjectOutputStream(new FileOutputStream("./tmp/stu"))
println(AStudent.name)
AStudent.name=null
println(AStudent.name)
oos.writeObject(AStudent)
oos.close
}
Java 代码:
package test;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.WeakHashMap;
public class Stu implements Serializable {
public static String name="Jack";
public static WeakHashMap map=new WeakHashMap();
public static void main(String[] args) throws IOException {
ObjectOutputStream oos= new ObjectOutputStream(new FileOutputStream("./tmp/stu"));
oos.writeObject(new Stu());
oos.close();
}
}
【问题讨论】:
-
通常在询问异常时,您可能需要添加堆栈跟踪。除此之外,Scala 代码和 Java 代码不应该是等价的(虽然我不太了解 Scala),因为一个有实例字段,而另一个有类字段(又名静态)。
-
Scala 没有
static字段的概念。您可以“认为”对象A的成员类似于Java 中的static。关键字是“认为相似”而不是实际上是静态的。对象AStudent将是匿名类AStudent.type的一个实例,对象AStudent的所有成员实际上都是类AStudent.type的成员。
标签: java scala serializable