/ / SerialVersionUID con "private static final long" ottiene ancora InvalidClassException - java, serialization

SerialVersionUID con "private static final long" ottiene ancora InvalidClassException - java, serialization

Ho compilato e risolto i vari progetti nella mia applicazione Java, generando serialVersionUID automaticamente tramite Eclipse per tutte le mie classi derivate da Serializable.

Ho letto le risposte a questo domandae verificato che serialVersionUids sono tutti private static final long.

Tuttavia, ottengo un errore come questo quando provo a eseguire:

java.io.InvalidClassException: com.acme.product.Widget; classe locale incompatibile: stream classdesc serialVersionUID = 5226096973188250357, local class serialVersionUID = -5432967318654384362

Cosa mi manca?

risposte:

1 per risposta № 1

Probabilmente hai un problema di classpath, in cui il tuo programma sta risolvendo una versione incompatibile precedente della classe che ha un valore diverso per serialVersionUID.

O l'oggetto serializzato che viene caricato, è stato serializzato con una versione oder della classe che non è disponibile.


1 per risposta № 2

Se la classe è cambiata da quando l'hai serializzata, la modifica potrebbe essere incompatibile. La serializzazione non può "deserializzarlo", nemmeno con serialVersionUID incluso.

Se hai la classe come era quando serializzata (ad esempio da SCM), prova a tornare a quello, a rigenerare serialVersionUID e rieseguire.

Se sono state apportate modifiche incompatibili, sarà necessario implementare readObject () / writeObject () per gestire autonomamente i dettagli di serializzazione.


-1 per risposta № 3

stream classdesc serialVersionUID = 5226096973188250357

Cosa mi manca?

Quello che ti manca è privato statico finale lungo serialVersionUID = 5226096973188250357L;

Tuttavia, se la classe modificata non è più compatibile con la serializzazione (vedere la Specifica di serializzazione degli oggetti) ora è possibile ottenere errori più oscuri.