Bonjour,
Je rencontre actuellement un léger problème avec une de mes classe sérialisée. J'enregistre l'ensemble de mes données avec un writeObject, et je les récupère par la suite avec un readObject, mais depuis quelques temps, j'ai supprimé un attribut de ma classe, et cela fausse d'anciens fichiers qui avaient été sauvegardés avec cet attribut.
Existe t'il un moyen (au travers probablement d'un resolveClass, resolveObject ou readResolve) de faire en sorte que lors de la lecture d'un ancien fichier, les attributs, qui, depuis ont été supprimés, ne soient pas pris en compte ?
Pour éclairer un peu mon problème voici un exemple :
Première version de ma classe, avec laquelle j'ai sauvegardé mes fichiers
1 2 3 4 5 6
|
public class test {
private String test;
private String test2;
private Boolean test3;
} |
Nouvelle version de ma classe, avec laquelle j'aimerai pouvoir lire mes fichiers (l'attribut "test2" a été supprimé)
1 2 3 4 5
|
public class test {
private String test;
private Boolean test3;
} |
Actuellement, lorsque je souhaite lire un fichier ayant été modifié de la sorte, j'obtiens une belle ClassCastException car j'ai comme l'impression qu'il décale les champs et qu'il essaye d'affecter la valeur de test2 (String) à test3 (Boolean)
Voilà le type d'erreurs que j'obtiens :
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: cannot assign instance of java.lang.String to field project.obj.test.test3 of type java.lang.Boolean in instance of project.obj.test
Auriez vous une solution ? Je peux remettre le champs dans ma classe, mais je ne souhaite pas conserver indéfiniment cette donnée devenue inutile (et le fait de rajouter le mot clé "transient" (qui m'aurait permis de ne plus resauvegarder l'attribut) fait planter la lecture :/)
Merci d'avance pour votre aide
Partager