10

quiero traducir el siguiente fragmento de código de Java a Scala:¿Cómo agregar @SerialVersionUID a una clase anónima?

Foo foo = new Foo() { private static final long serialVersionUID = 12345L; } 

Clase Foo es una clase abstracta.

¿Cómo se ve el código equivalente en Scala?

+0

¿Cómo se relacionan el título y la pregunta real? –

+0

Bien, pregunto en el título cómo puedo agregar '@ SerialVersionUID' a una clase anónima y mostrar un ejemplo de una clase construida anónima con un' serialVersionUID', que muestra dicha pregunta. – soc

Respuesta

10

Hay un Scala annotation for adding the ID. Pero parece que no puede aplicar esta solución a clases internas anónimas. Sin embargo, de acuerdo con el Scala FAQ:

En valores privados Scala que evalúan a una constante conocida en tiempo de compilación se convierten en las variables static final privadas Java. Esta característica no documentada debe hacer el truco para usted. Simplemente verifique la implementación de las listas en Scala (consulte, por ejemplo, src/scala/List.java). Ambas clases :: y Nil tienen un campo serialVersionUID de la siguiente forma: val privado serialVersionUID = literal numérico;

El código

object Ser extends Application { 
    trait Foo { def xy: Int } 
    val x = new Foo with java.io.Serializable { def xy = 2; private val serialVersionUID = 1L } 
} 

compila bien con el compilador 2.8.1. No lo he probado, aunque si la versión en serie de la clase resultante es realmente la proporcionada.

+0

Mhh, pero esto lo agregaría como método de instancia y no como un método de clase, ¿verdad? No creo que eso funcione ... – soc

+0

@soc: vea el extracto de las preguntas frecuentes: "En Scala, los valores privados que se evalúan como una constante conocida en tiempo de compilación se convierten en variables privadas estáticas privadas de Java". – Dirk

+0

WTH? No sabía eso y nunca asumí que esto pasaría ... ¡Muchas gracias! Me pregunto si eso es todo lo que se necesita o si se necesita algo de magia especial con respecto a serialVersionUID ... – soc

Cuestiones relacionadas