Scala的单身人士对序列化有哪些保证?

时间:2011-05-14 20:57:33

标签: java serialization scala singleton language-design

默认是安全的,比如Java的单元素枚举模式还是e。 G。有必要在某处定义readResolve或类似的方法,以防止单身合同的意外或恶意破坏?

1 个答案:

答案 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();
}