默认是安全的,比如Java的单元素枚举模式还是e。 G。有必要在某处定义readResolve
或类似的方法,以防止单身合同的意外或恶意破坏?
答案 0 :(得分:4)
是的,默认情况下是安全的:
object Singleton extends Serializable
// with Scala 2.8: @serializable object Singleton
import java.io._
val out = new ObjectOutputStream(new FileOutputStream("singleton"))
out.writeObject(Singleton)
out.close
val in = new ObjectInputStream(new FileInputStream("singleton"))
val obj = in.readObject
in.close
obj == Singleton // should print true
使用scalac编译对象并对其进行反编译时(例如使用JAD),您将获得以下Java文件:
public final class Singleton$ implements Serializable, ScalaObject
{
public Object readResolve()
{
return MODULE$;
}
private Singleton$()
{
}
public static final Singleton$ MODULE$ = new Singleton$1();
}