2009-03-03 10 views
37

Estoy extendiendo una clase (ArrayBlockingQueue) que implementa el Serializable interface. documentación del sol (y mi IDE) me aconseja que debería establecer este valor con el fin de prevenir el mal:¿Importa lo que elija para serialVersionUID al extender clases Serializable en Java?

Sin embargo, se recomienda encarecidamente que todas las clases serializables declaran explícitamente los valores serialVersionUID, ya que por defecto serialVersionUID computación es altamente sensible para clasificar los detalles que pueden variar según las implementaciones del compilador y, por lo tanto, pueden dar lugar a InvalidClassExceptions inesperados durante la deserialización.

Ahora, no me podría importar menos qué valor poner allí. ¿Importa?

Respuesta

64

No, siempre que lo cambie en el momento correcto (es decir, cuando realice un cambio que afecte la serialización, por ejemplo, eliminar un campo), no debería importar el valor que use.

Para simplificar sugiero comenzar con 0 y aumentarlo en 1 cada vez que lo necesite.

El serialization spec tiene más detalles.

+1

Lo siento Jon, el enlace apunta a un documento inexistente (concedido es más de 2 años después). –

+0

@The Elite Gentleman: Gracias, he editado para apuntar al servidor de Oracle. –

+1

¿Debería entender que dos clases diferentes (por ejemplo, MyJLabel y MyEncoder) podrían usar el mismo valor de 'serialVersionUID' y estar correctamente deserializadas? Supongo que sí, ya que los nombres son diferentes, solo debería ser una cuestión de versión. – Matthieu

10

Lo único que importa para el serialVersionUID es que las versiones serializadas compatibles con binarios de la clase tienen el mismo serialVersionUID; es decir, si no ha realizado ningún cambio radical en la forma serializada de la clase, todo estará bien.

Por supuesto, una mejor opción es usar las opciones avanzadas que la serialización pone a su disposición para que nunca haya ningún cambio de rotura. Sugeriría leer sobre readResolve() et al. Efectivo Java cubre algunos de los problemas más espinosos en esta área en detalle.

Cuestiones relacionadas