Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/01/2013, 15h11   #1
mlwacosmos
Invité de passage
 
Homme
Inscription : décembre 2007
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 8
Points : 4
Points : 4
Par défaut Caster des objets dynamiquement

Bonjour

Je tombe sur un problème assez obscure, voici un objet qui est de classe X

Object hBeanObject = iterator.next();

Si je fais un getClass() sur hBeanObject j'obtiens bien X

J'effectue ensuite l'opération suivante :
hBeanObject.getClass().cast(class.forName("X"))

qui devrait caster l'Object hBeanObject en objet de classe X

J'ai une exception ClassCastException avec un stackStrace null (donc pas de détail)... je ne vois pas pourquoi
mlwacosmos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 16h25   #2
olivier.pitton
Membre éprouvé
 
Avatar de olivier.pitton
 
Homme olivier pitton
Étudiant
Inscription : juin 2012
Messages : 210
Détails du profil
Informations personnelles :
Nom : Homme olivier pitton
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2012
Messages : 210
Points : 439
Points : 439
La méthode cast te permet de caster un objet dans la classe courante. Par exemple :

Code :
1
2
3
 
Object ob = new X();
X x = ob.getClass().cast(ob);
Or tu spécifies que tu veux caster la classe X en X. Mais ce sont des types différents.

Je dirais que le problème vient de la.

Javadoc.
olivier.pitton est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/01/2013, 17h11   #3
thelvin
Modérateur
 
Inscription : septembre 2004
Messages : 7 121
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 7 121
Points : 10 358
Points : 10 358
Envoyer un message via Skype™ à thelvin
Citation:
Envoyé par olivier.pitton Voir le message
La méthode cast te permet de caster un objet dans la classe courante.
Oui.

Citation:
Envoyé par olivier.pitton Voir le message
Par exemple :

Code :
1
2
3
 
Object ob = new X();
X x = ob.getClass().cast(ob);
Mais cet exemple ne compile pas. ob.getClass() ne renvoie pas un Class<X> mais un Class<?>. Du coup l'appel à cast() ne renvoie pas un X mais un Object.

Voici des exemples qui marcheraient :

exemple 1 :
Code :
1
2
Object ob = new X();
X x = (X)ob.getClass().cast(ob);
ce qui est stupide, il n'y a rien de dynamique et il suffit de faire :

Code :
1
2
Object ob = new X();
X x = (X)ob;
exemple 2 :
Code :
1
2
Object ob = new X();
X x = X.class.cast(ob);
ce qui est stupide pour la même raison, il n'y a rien de dynamique et il suffit de faire la même chose que déjà dit.

exemple 3 :
Code :
1
2
Object ob = new X();
Object x = ob.getClass().cast(ob);
ce qui est stupide, car on vient en gros de vérifier qu'un objet est bien de sa propre classe. Les objets n'ont pas de crise existentielle, ils sont toujours de leur propre classe. Il n'y a rien à vérifier, ce qu'il fallait faire à la place, c'est rien.

exemple 4 :

Code :
1
2
X ob = new X();
X x = ob.getClass().cast(ob);
Même chose qu'au-dessus. ob étant déclaré de type X, getClass() renvoie un Class<? extends X> et cast() renvoie un X. Mais on vient juste de vérifier qu'un objet déclaré de type X et instancié, est bien d'une classe sous-type de X. Euh, si ce n'était pas le cas le compilateur ne nous aurait pas laissé le mettre dans une variable de type X. Il n'y a rien de dynamique, il n'y a rien à vérifier.

Conclusion : ça ne sert à rien.

Citation:
Envoyé par mlwacosmos
hBeanObject.getClass().cast(class.forName("X"))

qui devrait caster l'Object hBeanObject en objet de classe X
Cela ne se fait pas avec un cast. Tu essaies de vérifier si l'objet est de type X. Cela se fait comme ça :

Code :
if( class.forName("X").isInstance(hBeanObject) ) {
Citation:
Envoyé par mlwacosmos
J'ai une exception ClassCastException avec un stackStrace null (donc pas de détail)... je ne vois pas pourquoi
parce que ce n'est pas comme ça qu'on utilise cast(). Il faut lui donner l'obet à caster, ce que tu lui as donné est autre chose.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher du poisson, il videra le lac et au bout de deux ans son village ne mangera plus jamais.
Partagez vos connaissances, mais aussi comment s'en servir.
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 17h32   #4
chtig
Membre Expert
 
Inscription : janvier 2007
Messages : 1 331
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 331
Points : 1 561
Points : 1 561
Dans tout ça j'avoue que je n'arrive pas à comprendre pourquoi tu voulais faire un cast de ton objet ....
__________________
Program manager chez TraceOne. http://www.traceone.com
chtig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 10h01   #5
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 287
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Service public

Informations forums :
Inscription : avril 2007
Messages : 18 287
Points : 32 766
Points : 32 766
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
D'accord avec toi, ce code n'a ni queue ni tête et la notion de "cast dynamique" n'a pas plus de sens. Un cast, on fait ça quand on suppose qu'un objet et d'un type particuler T et qu'on veux l'assigner à une variable de type T. Or la variable est bien déclarée => donc T est connu à la compilation. Donc le code c'est


simplement.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h36.


 
 
 
 
Partenaires

Hébergement Web