soc*_*soc 15 java singleton serialization scala language-design
默认情况下是否安全,例如Java的单元素枚举模式,或者是否需要在readResolve
某处定义或类似的方法来防止单一合同的意外或恶意破坏?
是的,默认情况下是安全的:
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
Run Code Online (Sandbox Code Playgroud)
当您使用 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();
}
Run Code Online (Sandbox Code Playgroud)