Tengo una clase pública, que implementa Serializable, que se extiende por varias otras clases. Solo esas subclases se serializaron antes, nunca la superclase.serialización Java - java.io.InvalidClassException clase local incompatible
La superclase había definido un serialVersionUID.
no estoy seguro si importa, pero no fue marcada privada, sino que sólo tenía la protección por defecto - se podría decir que era el paquete protegido
static final long serialVersionUID = -7588980448693010399L;
El super clase, ni ninguna de las subclases, sin embargo implementaron readObject o writeObject, y ninguna de las subclases tenía un serialVersionUID explícitamente definido. Pensé que uno definido en la superclase sería suficiente.
A pesar de todo, las cosas estaban bien en cuanto a la lectura de objetos previamente serializados hasta que se añadiera una nueva variable de instancia, List/ArrayList, junto con un nuevo método a la superclase, y algunas variables de instancia privadas una de sus subclases.
Ahora, al intentar leer objetos previamente serializados, se está lanzando una excepción. Uno similar a esto:
com.SomeCompany.SomeSubClass; local class incompatible: stream classdesc serialVersionUID = 1597316331807173261, local class serialVersionUID = -3344057582987646196
Asumo esto se deben a que el serialVersionUID por defecto, que se utilizó porque no declaró en una cualquiera de las subclases, ahora ha cambiado debido a los cambios en la superclase y una subclase.
Se agradecerán sugerencias sobre cómo salir de este dilema. Asumo que necesito implementar readObject y writeObject, pero aparte de invocar defaultReadObject() y defaultWriteObject(), no estoy exactamente seguro de lo que debo hacer. Tampoco sé si necesito agregar serialVerisonUIDs a todas las subclases o si readObject y writeObject deben ser implementados por cada subclase, o si puedo implementarlos una vez, suponiendo que lo necesito en absoluto, en la superclase.
... o si no tiene las clases antiguas, tome el antiguo serialVersionUID del mensaje de excepción, repita según sea necesario. –
Su respuesta y [truthealitiy's] (http://stackoverflow.com/a/10378907/712526) combinados contienen todos los detalles relevantes. Tal vez las preguntas podrían fusionarse? – jpaugh