Saltar al contenido

Qué significa: La clase serializable no declara un static campo serialVersionUID final?

Luego de de nuestra larga recopilación de información resolvimos esta traba que tienen algunos de nuestros lectores. Te ofrecemos la respuesta y deseamos que te sea de gran apoyo.

Solución:

Del javadoc:

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 una diferente serialVersionUID que el de la clase del remitente correspondiente, entonces la deserialización dará como resultado un InvalidClassException. Una clase serializable puede declarar su propia serialVersionUID explícitamente al declarar un campo llamado "serialVersionUID" eso debe ser staticfinal, y de tipo long:

Puede configurar su IDE para:

  • ignorar esto, en lugar de dar una advertencia.
  • generar automáticamente una identificación

Según su pregunta adicional “¿Puede ser que el mensaje de advertencia discutido sea una razón por la cual mi aplicación GUI se congela?”:

No, no puede ser. Puede causar un problema solo si está serializando objetos y deserializándolos en un lugar (o tiempo) diferente donde (cuando) la clase ha cambiado, y no dará como resultado la congelación, pero sí InvalidClassException.

Las otras respuestas hasta ahora tienen mucha información técnica. Trataré de responder, como se solicita, en términos simples.

La serialización es lo que le hace a una instancia de un objeto si desea volcarlo en un búfer sin procesar, guardarlo en el disco, transportarlo en un flujo binario (por ejemplo, enviar un objeto a través de un socket de red) o crear un objeto serializado. representación binaria de un objeto. (Para obtener más información sobre la serialización, consulte Serialización de Java en Wikipedia).

Si no tiene intención de serializar su clase, puede agregar la anotación justo encima de su clase @SuppressWarnings("serial").

Si va a serializar, entonces tiene una gran cantidad de cosas de las que preocuparse, todas centradas en el uso adecuado de UUID. Básicamente, el UUID es una forma de “versionar” un objeto que serializaría para que cualquier proceso que se esté deserializando sepa que se está deserializando correctamente. Vería Garantizar un control de versión adecuado para objetos serializados para obtener más información.

Los motivos de la advertencia se documentan aquí, y las soluciones simples son desactivar la advertencia o colocar la siguiente declaración en su código para proporcionar el UID de la versión. El valor real no es relevante, comience con 999 si lo desea, pero cámbielo cuando realice cambios incompatibles en la clase.

public class HelloWorldSwing extends JFrame {

        JTextArea m_resultArea = new JTextArea(6, 30);
        private static final long serialVersionUID = 1L;

Nos puedes añadir valor a nuestro contenido informacional participando con tu veteranía en las críticas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *