Domanda

Di recente ho letto un commento in cui si dice che l'uso di serialversionuid per rendere diverse versioni della stessa classe compatibili per la serializzazione/deserializzazione non è più necessario da Java 5 in poi. È corretto? Forse è stato confuso con tipi di ritorno covariante. Quindi volevo dare un'occhiata con tutti voi.

È stato utile?

Soluzione

Il Javadocs per Java 5 afferma ancora che è necessario:

Se una classe serializzabile non dichiara esplicitamente un serialversionuid, il runtime di serializzazione calcolerà un valore di serialversionuid predefinito per quella classe basata su vari aspetti della classe, come descritto nella specifica di serializzazione degli oggetti Java (TM). Tuttavia, si raccomanda fortemente che tutte le classi serializzabili dichiarino esplicitamente i valori di serialversionuid, poiché il calcolo di serialversionuid predefinito è altamente sensibile ai dettagli delle classi che possono variare a seconda delle implementazioni del compilatore e può quindi comportare un'inamvista invalidclassesscepzioni durante la diseriazione. Pertanto, per garantire un valore serialversionuide coerente tra diverse implementazioni del compilatore Java, una classe serializzabile deve dichiarare un valore esplicito di serialversionuid. Si consiglia inoltre che le dichiarazioni esplicite di serialversionuid utilizzino il modificatore privato, ove possibile, poiché tali dichiarazioni si applicano solo ai campi di classe che dichiarano immediatamente, non sono utili come membri ereditari.

Altri suggerimenti

Da quando Java 1.4 sei stato in grado di utilizzare XMLencoder Per la serializzazione e questo ignora qualsiasi serialversionuid, così come la maggior parte delle altre librerie di serializzazione.

Tuttavia, se si utilizza ObjectOutputStream, il suo utilizzo di serialversionuid non è cambiato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top