PDA

View Full Version : [JAVA] deserializzare un oggetto, ma la classe è cambiata!


Prorad
19-03-2010, 13:13
Salve a tutti,

Supponiamo che io abbia una classe
class Foo {
Matrice m

//...metodi vari

}

creo una istanza di questa classe e la serializzo.

Poi però cambio la definizione della classe in
class Foo {
MatriceBoia mb

//...metodi vari

}

se vado a deserializzare la vecchia istanza con la nuova definizione, il campo mb rimarrà settato a null e il vecchio valore di m andrà perduto.
Ora, siccome Matrice e MatriceBoia sono due classi di due package di matrici, io so come convertire l'una nell'altra. Il punto però è che non so come recuperare il campo m in fase di deserializzazione: c'è un modo per accedere ad un singolo campo in un oggetto deserializzato che ancora non è stato castato al suo tipo di appartenenza?
Altrimenti come altro posso fare?

ps: non posso ovviamente ricreare l'oggetto da zero, perchè per averlo mi ci sono voluti due giorni di elaborazione :D

thx in advance

PGI-Bis
19-03-2010, 14:27
Se hai ancora la classe Matrice, sì, se la classe Matrice non esiste più, no. No significa che puoi sempre ricostruire la classe ma devi andare a interpretare manualmente il flusso di dati serializzati (che ha un suo protocollo).

Nel primo caso, crei il metodo readObject in Foo, fai leggere all'ObjectInputStream i campi (readFields), pigli il campo "matrice", verifichi:

se è di tipo Matrice -> deserializzi manualmente convertendo Matrice in MatriceB

se è di tipo MatriceB -> esegui defaultReadObject.

Prorad
19-03-2010, 15:24
Grazie per la risposta, decisiva :D
naturalmente si, la classe Matrice ce l'ho.

thx again

cionci
20-03-2010, 17:33
Nel caso in cui il dato da deserializzare sia di tipo matrice, puoi usare la deserializzazione automatica di Matrice e poi ti fai un costruttore in Foo che prende come parametro Matrice e ti fai la conversione lì dentro.