[RESOLU] Java: Cast
Forum Programmation : [RESOLU] Java: Cast
je cherche a déserialiser un Objet de type "Identifiant" (qui a été correctement serialisé avant), mais quand je cherche a le récupérer, ca me met:
Exception in thread "main" java.lang.ClassCastException
j'ai pourtant bien rajouté "implements Serializable"...
et j'y arrivais tres bien avec un Vector dans un autre contexte...
voici le Cast qui bloque:
(bde de type Identifiant)
Code :
|
Si:
- ta classe Identifiant implemente bien serializable
- bde est une instance de Identifiant
- le fichier contient bien une instance serialisée de Interface
alors oui ce code devrait marcher (vérifie bien la 3ème condition).
c tout bon... les dieux du java sont contres moi $^^
Es-tu certain qu'avec ce programme, la classe Identifiant est exactement la même que celle que tu as utilisée lors de l'écriture dans le fichier ?
Je m'explique. Les étapes suivantes amenent à ce problème:
1. tu crée ton programme de base
2. tu crée un fichier toto.dat à partir de ce programme
3. tu modifies ta classe Identifiant, par exemple en ajoutant une variable membre
4. tu essaie de lire le fichier avec la classe Identifiant.
Et bien, ici tu as une erreur, car même si la classe porte le même nom et qu'elle est à 99% la même, comme le contenu n'est pas exactement le même, les octets sérialisés ne le sont pas également: le programme ne reconnait plus les données sérialisée.
C'est pour ça que j'insistais sur le dernier cas, mais je n'avais pas donné assez d'explications.
g fait des inner class de Identifiant dans ma classe qui serialise, et dans celle qui deserialise...
tout en copier-coller :s
C'est la classe qui sérialise qui est serialisé. Si c'est Identifiant qui doit etre serialisé, c'est elle qui doit implementer l'interface Serializable (je sais plus le nom exact) pas la classe au dessus.
je vois pas trop ta structure, tu as fait ça d'après ce que j'ai compris:
Code :
|
et pareil avec une classe B ?
Dans ce cas tu as 2 classes Identifiant différentes une dasn A et une dans B ?
euh... oui! prkoi, il ne faut pas?
mais si je ne le fait pas, comment la classe qui déserialise connait le type d'objet qu'elle doit récuperer apres, dans le cast?
Je ne me rappelle plus trop de comment ça marche.
Mais si tu fais une classe simple Identifiant (pas inner).
que tu implemente serialisable, ça devrait marcher. C'est la classe qui se sérialise elle-même.
Code :
|
tu redéfinis la méthode, et tu envois simplement dans ton fichier une instance de Identifiant.
et apres, quand je déserialise, je fais comment?
en fait, je veux compiler et executer avec un batsh, mais le truc c'est que j'ai remarqué que je si je compilais un fichier java, puis un autre, l'autre ne connaissais pas le permier...
et bien pareil.
Je ne me rapelle plus, mais s'il y a une interface du genre Deserialisable (je pensais qu'il n'y en avait qu'une et qu'elle faisait dans les 2 sens), et bien tu l'implémente aussi dans la même classe et tu ne touche pas le code de ton premier post qur tu mets ailleurs dans une autre classe.
Pour la compilation, il faut faire un "import" de ta classe et bien mettre la variable d'environnement CLASSPATH à jour (ou l'indiquer en ligne de commande).
mieux vaut l'indiquer en ligne de commande, mais comment je fais?
javoue avoir bcp de mal avec les classpath
en fait, fallait créer un package, faire un import, et zapper les inner class!
mici!
Il y a 1642 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Par allstar27 il y a 4 jours :