La Red de Conocimientos Pedagógicos - Currículum vitae - ¿Qué significa esta frase cuando aparece en código Java?

¿Qué significa esta frase cuando aparece en código Java?

La interfaz java.io.Serializable se implementa para la serialización y serialVersionUID se utiliza para indicar la compatibilidad entre diferentes versiones de la clase de serialización. Si modifica esta clase, modifique este valor. De lo contrario, se producirán errores al restaurar clases previamente serializadas con versiones anteriores de clases.

Después de la implementación, si utiliza una herramienta, aparecerá una advertencia y le pedirá que genere automáticamente un serialVersionUID final largo estático privado = 1L.

Para deserializar, To Para garantizar la compatibilidad de las versiones de clases, es mejor agregar el atributo serialVersionUID largo final estático privado a cada clase que se va a serializar y definir el valor específico usted mismo.

En JDK, puede usar el directorio bin de. JDK La herramienta serialver.exe genera este serialVersionUID. Por ejemplo, para Test.class, puede ejecutar el siguiente comando: serialver Test.

De esta manera, incluso si una clase se modifica después de que el objeto correspondiente haya sido serializado, el objeto aún se puede deserializar correctamente. De lo contrario, si el atributo no está definido explícitamente, la JVM calculará el valor del atributo en función de la información relevante de la clase, y el resultado del cálculo de la clase modificada a menudo es diferente del resultado del cálculo de la clase antes de la modificación, lo que resulta en la deserialización del objeto debido a la clase Error debido a incompatibilidad de versión.

Otra desventaja de no definir explícitamente el valor de este atributo es que no favorece la portabilidad del programa entre diferentes JVM. Debido a que diferentes compiladores pueden implementar diferentes estrategias de cálculo para este valor de atributo, aunque la clase no ha cambiado, debido a diferentes JVM, se produce el fenómeno de versiones de clases incompatibles y la imposibilidad de deserializar correctamente.

Cuando nuestro sistema no necesita clases serializadas con mucha frecuencia, podemos eliminar estas advertencias y realizar las siguientes configuraciones: Ventana--gt; Preferencias--gt; Java, cambiar la configuración de clase serializable sin serialVersionUID a advertencia. Cambie a Ignorar. Luego Eclipse recompilará el programa y esos mensajes de advertencia desaparecerán.

La sugerencia final es que si desarrollamos una gran cantidad de clases que necesitan ser serializadas, será mejor que volvamos a la configuración original. Esto garantiza el rendimiento y la solidez del sistema.

Explicación sobre serialVersionUID

La función de serialVersionUID:

Para mantener la compatibilidad de la versión durante la serialización, es decir, la deserialización aún mantiene la coherencia del objeto cuando la versión se actualiza la unicidad.

Puede escribir uno a voluntad y generará uno para usted en Eclipse. Hay dos formas de generarlo:

Uno es el 1L predeterminado, por ejemplo: estático privado. final long serialVersionUID = 1L;

Una es generar un campo hash de 64 bits basado en el nombre de la clase, el nombre de la interfaz, el método y el atributo del miembro, etc., como por ejemplo: private static final long serialVersionUID = - 8940196742313994740L y así sucesivamente.

Solicitudes de Eclipse La clase serializable XXX no declara un campo serialVersionUID final estático de tipo largo

Eso se debe a que Eclipse proporciona esta función de solicitud para usted.

Usted Haga clic en su ícono de advertencia dos veces y Eclipse lo mostrará automáticamente.

Si no le gusta, puede desactivarlo,

windows -gt compiler -gt; gt ; Error/Advertencias

-gt; Posibles problemas de programación

Cambie la advertencia de la clase Serializable sin serialVersionUID para ignorarla.

De hecho, si no lo hace considere la compatibilidad. Si hay un problema, desactívelo.

De hecho, es bueno tener esta función.

Siempre que cualquier categoría implemente la interfaz serializable,

Si no se agrega serialVersionUID, Eclipse le dará un mensaje de advertencia.

Este serialVersionUID es para hacer que la clase sea serializable y compatible con versiones anteriores.

Considérelo si su clase Lo serializado se guarda en el disco duro hoy,

Pero luego cambió el campo de la categoría (agregado, reducido o renombrado).

Cuando deserialice, aparecerá una excepción. Esto hará que sea un problema de sexo incompatible.

Pero cuando el serialVersionUID es el mismo, deserializará diferentes campos con el valor predeterminado de tipo.

Esto puede evitar problemas de incompatibilidad.

p>

Estado de excepción:

La clase serializable XXX no declara un campo serialVersionUID final estático de tipo largo