java - descargar - ¿Qué significa la advertencia "declarar un ID de serie final estático estático" y cómo solucionarlo?
java offline (4)
Posible duplicado:
¿Qué significa: la clase serializable no declara un campo final serialVersionUID estático?
Advertencia del compilador de Java: The serializable class [*****] does not declare a static final serialVersionUID field of type long.
¿Por qué? ¿Como arreglarlo?
¿Estás extendiendo un objeto Swing?
A menudo utilizo la anotación @suppressWarnings para librarme de esta advertencia.
Supongo que la cuestión de suprimir la advertencia o proporcionar una ID única depende de la escala de su aplicación y de su uso previsto de la serialización de objetos.
Declara así:
private static final long serialVersionUID = -4673040337179571462L;
Es requerido por la interfaz serializable.
Esto se explica bastante bien here :
El serialVersionUID es un identificador de versión universal para una clase Serializable. La deserialización utiliza este número para garantizar que una clase cargada se corresponda exactamente con un objeto serializado. Si no se encuentra ninguna coincidencia, se lanza una excepción InvalidClassException.
Arregla el error añadiendo
private static final long serialVersionUID = 7526472295622776147L; // unique id
a la clase.
Otras lecturas:
- java.io.Serializable
- ¿Por qué debería preocuparme por serialVersionUID? (desbordamiento de pila)
Una nota al margen: si está utilizando Eclipse y si usted (y nadie más) planea serializar sus clases, también puede eliminar el error yendo a
Ventana → Preferencias → Java → Compilador → Errores / Advertencias
y seleccione "Ignorar" en "Clase serializable sin serialVersionUID".
solo agrega
private static final long serialVersionUID = 1L;//or some long
java.io.Serializable describen bastante bien
El tiempo de ejecución de serialización asocia con cada clase serializable un número de versión, llamado serialVersionUID, que se usa durante la deserialización para verificar que el remitente y el receptor de un objeto serializado hayan cargado clases para ese objeto que sean compatibles con respecto a la serialización. Si el receptor ha cargado una clase para el objeto que tiene un serialVersionUID diferente al de la clase del remitente correspondiente, la deserialización dará como resultado una excepción InvalidClassException. Una clase serializable puede declarar su propio serialVersionUID declarando explícitamente un campo llamado "serialVersionUID" que debe ser estático, final y de tipo long:
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
Si una clase serializable no declara explícitamente un serialVersionUID, entonces el tiempo de ejecución de serialización calculará un valor serialVersionUID predeterminado para esa clase basado en diversos aspectos de la clase, como se describe en la Especificación de serialización de objetos Java (TM). Sin embargo, se recomienda encarecidamente que todas las clases serializables declaren explícitamente los valores de serialVersionUID, ya que el cálculo predeterminado de serialVersionUID es altamente sensible a los detalles de la clase que pueden variar dependiendo de las implementaciones del compilador y, por lo tanto, puede dar lugar a inesperadas excepciones de clase Invalid durante la deserialización. Por lo tanto, para garantizar un valor serialVersionUID consistente en diferentes implementaciones del compilador java, una clase serializable debe declarar un valor serialVersionUID explícito. También se recomienda encarecidamente que las declaraciones explícitas de serialVersionUID utilicen el modificador privado siempre que sea posible, ya que dichas declaraciones se aplican solo a los campos de clase de declaración inmediata - serialVersionUID que no son útiles como miembros heredados.
Ver también