2011-05-14 13 views

Respuesta

4

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(); 
} 
+1

Por qué es 'Singleton' no serializable por defecto? – soc

+0

@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

+1

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

Cuestiones relacionadas