Pregunta

Como parte de la depuración de una aplicación, noté que Field.getDeclaredFields() devuelve algunos campos sintéticos, incluido un serialVersionUID campo en una clase que extiende una interfaz, aunque ninguno extiende Serializable.

¿Por qué el compilador agrega tales campos?

ACTUALIZAR

De hecho, también hay una $VRc campo sintético creado.

¿Fue útil?

Solución

El compilador/tiempo de ejecución de Java no creará automáticamente un campo serialVersionUID.Sospecho que está utilizando algún tipo de marco de mejora de código de bytes bajo el capó al que se le indica que agregue los campos sintéticos ya sea en tiempo de ejecución o durante la compilación.

El $VRc El campo es producido por el marco de instrumentación Emma, ​​por lo que esa sería la razón para al menos uno de los campos sintéticos.

El serialVersionUID el campo también es añadido por Emma, cuando el instr.do_suid_compensation La propiedad se establece en verdadero.

Otros consejos

Este campo es esencial para Java publicación por entregas. En resumen: permite que el JVM descubra que la clase que fue serializada (por ejemplo, guardada en el disco) se ha cambiado después y no se puede deserializar de manera segura al objeto.

Mira esto Control de versiones capítulo En el documento citado anteriormente, explica cómo serialVersionUID se usa.

ACTUALIZACIÓN: Acabo de notar que su clase no se implementa Serializable. ¿Estás seguro de que ninguna de las súper clases o interfaces implementadas no se extiende? Serializable?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top