Sí, es seguro por defecto:
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
Cuando se compila el objeto con scalac y descompilarlo (por ejemplo, con JAD) obtendrá tras Java archivo:
public final class Singleton$ implements Serializable, ScalaObject
{
public Object readResolve()
{
return MODULE$;
}
private Singleton$()
{
}
public static final Singleton$ MODULE$ = new Singleton$1();
}
Por qué es 'Singleton' no serializable por defecto? – soc
@soc - esa pregunta no es diferente de preguntar por qué todos los tipos no son serializables por defecto - hay una pregunta de Java para este efecto [aquí] (http://stackoverflow.com/questions/441196/why-java-needs- interfaz serializable). – McDowell
No estoy de acuerdo. Básicamente, hay solo una implementación sensata (en el 99,5% de los casos de uso) para serializar el patrón de singleton, que es fácilmente reemplazable si es necesario. Me pregunto si esos 140 bytes guardados son tan importantes que está permitido por defecto romper el contrato de singleton. – soc