2012-04-30 43 views
11

¿Hay alguna forma de generar serialVersionUID en Eclipse en serie? Por serial quiero decir que si una clase serializable tiene serialVersionUID = 1L, cuando genero serialVersionUID de otra clase, esto será serialVersionUID = 2L.Acerca de serialVersionUID generado en Eclipse

Si especifico manualmente 1L, 2L, 3L y así sucesivamente, ¿esto puede crear algún problema?

Eclipse dio la opción de elegir "Agregar ID de versión de serie generado", ¿es esta opción segura de elegir?

+1

¿Por qué querría * clases * diferentes tener serialUserVersionUIDs? –

+0

Es mi estilo de programación para generar serialVersionUID serialmente. –

+2

Ese es un estilo común en todas las versiones de una sola clase. ¿Su estilo en múltiples clases tiene un beneficio? Cuando más tarde desea versionar una clase en particular, ¿a qué establece el serialVersionUID de esa clase, y qué ocurre con la relación en serie entre las clases? –

Respuesta

17

no, no creará ningún problema en cualquiera de sus dos circunstancias:

  • puede especificar manualmente de forma incremental
  • puede dejar que Eclipse asignarles valores generados al azar
  • se puede mantener a todos 1L para diferentes clases

El propósito de la UID de serie es prohibir la serialización y deserialización de mismas clases en diferentes versiones, especialmente cuando no hay compatibilidad hacia adelante (ej. la nueva versión de la clase no puede ser serializada/no serializada por una definición previa).

Esta es una circunstancia que ocurre muy raramente, especialmente cuando se trabaja con su propio proyecto que no forman parte de grandes marcos que dependen de la serialización. Entonces puedes hacer lo que quieras con seguridad.

La situación en la que desea tener diferentes publicaciones seriadas para la misma clase es cuando está actualizando una clase y desea prohibir la serialización de la misma con una declaración anterior de la MISMA clase.

+2

¿Qué pasa con '@SuppressWarnings (" serial ")'? ¿Cómo cambiaría esto las cosas? Recomendado, no recomendado? ¿Evitar? – ADTC

+2

@ADTC funciona, pero está sujeto a incompatibilidades del compilador. Ver la interfaz Serializable. De Java 7: "Si una clase serializable no declara explícitamente un serialVersionUID, el tiempo de ejecución de serialización calculará un valor serialVersionUID por defecto para esa clase basado en varios aspectos de la clase, como se describe en la especificación de serialización de objetos Java (TM). Sin embargo, [...] puede variar según las implementaciones del compilador y, por lo tanto, puede dar como resultado un " – Kissaki

1

la serialización Java soporta que todas las clases tienen el mismo serialVersionUID

esto es el uso para el control de versiones para que los objetos serializados de una definición más viejos son incompatibles con una versión más reciente

cheque http://java.sun.com/developer/technicalArticles/Programming/serialization/ de los detalles (scroll a "control de versiones")

2

Permítanme responder a sus preguntas al revés: generada

Añadir la versión de serie de identificación ... ¿es seguro? Respuesta: Sí

Si especifica manualmente 1L, 2L, 3L es que un problema: No más de un problema de hacerlos en los 1 o cualquier otro número

la generación de ID de serie en serie: La respuesta es que no hay mecanismo incorporado para hacer esto. El hecho de que estés haciendo esta pregunta me lleva a creer que no sabes para qué es el serialVersionUID. Incluso si ya leíste lo que hace, deberías volver a leerlo.

+0

inesperado. Gracias por la respuesta. Sí, sé por qué se usó sserialVersionUID, pero mi estilo de programación es generarlos en serie en un proyecto en Eclipse. –

2

No debe hacer esto en absoluto. La idea es mantener la constante serialVersionUID durante el mayor tiempo posible durante la evolución de una clase, observando las reglas en la sección Control de versiones de objeto de la especificación de serialización de objetos.

Su 'estilo de programación' no tiene nada que ver con eso. Es una cuestión de usar la cosa para el propósito para el que fue diseñada. No está diseñado para el propósito para el que lo está usando. Los sistemas de control de código fuente pueden hacer eso por usted.

+0

Si desea que su clase sea útil durante mucho tiempo, solo debe hacer "cambios compatibles", todos los cuales están definidos en la especificación de serialización de objetos que menciona @EJP, aquí. –

Cuestiones relacionadas