[Java 5.0] serial : "serializable class Main has no definition of serialVersionUID"

3791 vistas

Este warning significa que una clase que implementa la interfaz java.io.Serializable no ha definido ningún serialVersionUID, el cual permite asignar un número de versión a la clase. Este número tiene que cambiarse cuando se añade o borra un campo no-transient de la clase. Teóricamente, corresponde al programador gestionar este número de versión. No obstante, si este campo no está, el compilador generará un número automáticamente.

El campo serialVersionUID se usa en el momento de la desserialización para asegurarse que las versiones de las clases Java correspondan. Si no fuera el caso, se elevarÃa una InvalidClassException.

Es aconsejable gestionar el serialVersionUID de todas las clases serializables y de modificarlo si se cambia algún campo de la clase.

Veamos un ejemplo de warning:



dos
  1. Main.java:5: warning: [serial] serializable class Main has no definition of serialVersionUID



Para definir el serialVersionUID, tendremos que usar el código siguiente (donde 1L es el número de la versión que se tendrá que cambiar en cada modificación de campos. El valor no tiene importancia siempre que cambie al cambiar lso campos a serializar):



java
  1. private static final long serialVersionUID = 1L;



Este warning sólo está activo con las opciones -Xlint o -Xlint:serial de javac 5.0...

Esto también afecta a las clases que heredan de una clase que implemente Serializable, ya que ésta también lo será. Por lo tanto, este warning afecta a todas las clases de los componentes de Swing por ejemplo...