Ayer estaba codificando una simple clase y al definir (sobreescribir) el método toString cometí el error de llamarlo toSring (sin escribir la t) así que cuando desde la clase principal usaba la ayuda de autocompletado de Netbeans sin darme cuenta escogía la función correcta o definida (toSring).
El programa guardaba los datos desde un vector(array) de objetos los cuales eran serializados para guardarlos/recuperarlos desde un fichero. El problema aparecía cuando escribía una sentencia del tipo:
System.out.println(“Cliente: “.listaClientes[i].toString());
En este caso en lugar de mostrar los datos me mostraba la referencia a la parte de la memoria donde estaban guardados los datos, ya que mi redefinición de la clase toString() no existía al haberle dado un nombre distinto (toSring). Y estuve horas buscando el error de por que en ocasiones (cuando se usaba toSring) mostraba los datos de forma correcta y cuando hacía uso de toString me aparecía algo no deseado.
Después de mucho tiempo descubrí el error, modifiqué en la clase Clientes el nombre del método toSring a sobreescribir el método toString y la cosa empezó a empeorar ya que ahora al usar este nuevo método sobreescrito toString me daba el siguiente error:
java.io.InvalidClassException: unidad6.borradorTarea.Cliente2; local class
* incompatible: stream classdesc serialVersionUID = 6767654062997943739, local class serialVersionUID = 3950856652627027910
El problema y que ya me había pasado alguna vez anterior es que al cambiar cualquier elemento de una clase que es serializada para poder escribir objetos dentro de un fichero, los datos que tuvieras de anteriores pruebas con la versión anterior de la clase NO sirven para usarlos con la nueva clase porque aparecen errores como el anterior.
La solución fue borrar el fichero con los datos anteriores y empezar con uno nuevo el cual no será el bueno hasta que la clase esté definitivamente terminada.
CONCLUSIÓN: Antes de empezar a hacer pruebas es muy recomendable tener finalizadas y bien terminadas las clases que hacen uso de serialización para guardar sus datos en ficheros externos.