Cuando usa serialVersionUID (1L) en lugar de generar serialVersionUID (3567653491060394677L) está diciendo algo.
Está diciendo que está 100% seguro de que ningún sistema tocará esta clase que tenga una versión serializada incompatible de esta clase con un número de versión 1.
Si puede pensar en alguna excusa para que su historial de versiones en serie sea desconocido, eso podría ser difícil de decir con confianza. En su vida, muchas personas mantendrán una clase exitosa, vivirán en muchos proyectos y residirán en muchos sistemas.
Puedes agonizar por eso. O puedes jugar a la lotería con la esperanza de perder. Si genera la versión, tiene una pequeña posibilidad de que las cosas salgan mal. Si asumes "Hey, apuesto a que nadie usó 1 todavía", tus probabilidades son mayores que pequeñas. Precisamente porque todos pensamos que 0 y 1 son geniales, tiene mayores probabilidades de alcanzarlos.
-
Cuando genera serialVersionUID (3567653491060394677L) en lugar de usar serialVersionUID (1L), está diciendo algo.
Está diciendo que las personas pueden haber creado o generado manualmente otros números de versión a lo largo del historial de esta clase y no le importa porque Longs está volviendo grandes números.
De cualquier manera, a menos que conozca perfectamente el historial de números de versión utilizados al serializar la clase en todo el universo de dónde ha existido o existirá alguna vez, se está arriesgando. Si tienes tiempo para asegurarte al 100% de que 1 es AOK, hazlo. Si eso es demasiado trabajo, adelante y genera el número a ciegas. Es más probable que ganes la lotería que que salga mal. Si es así, avísame y te compraré una cerveza.
Con toda esta charla sobre jugar a la lotería, puedo haberte dado la impresión de que serialVersionUID se genera aleatoriamente. De hecho, siempre y cuando el rango de números se distribuya uniformemente sobre cada valor posible de un Long, estaría bien. Sin embargo, en realidad se hace de esta manera:
http://docs.oracle.com/javase/6/docs/platform/serialization/spec/class.html#4100
La única diferencia que obtienes con eso es que no necesitas una fuente aleatoria. Estás usando los cambios en la clase misma para cambiar el resultado. Pero de acuerdo con el principio del casillero, todavía existe la posibilidad de que pueda salir mal y tener una colisión. Es increíblemente improbable. Buena suerte sacando una cerveza de mí.
Sin embargo, incluso si la clase solo vivirá en un sistema y una base de código, pensar que incrementar el número a mano te da cero posibilidades de colisiones solo significa que no entiendes a los humanos. :)