Faire un cast dynamique

Faire un cast dynamique - Java - Programmation

Marsh Posté le 01-04-2003 à 11:19:16    

Classiquement, en Java on est amené à faire :
 

Code :
  1. MyObject m = (MyObject)o;


 
Maintenant si j'ignore que o est en fait du type MyObject, comment puis-je faire le bon cast, dynamiquement ?


---------------
Le site de ma maman
Reply

Marsh Posté le 01-04-2003 à 11:19:16   

Reply

Marsh Posté le 01-04-2003 à 11:32:44    

bin tu dois savoir au minimum avec quoi tu travailles hein :o
 
instanceof peux te permettre de trouver le type
 
if (o instanceof MyObject)  
  // ... cast to MyObject


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 01-04-2003 à 11:37:49    

Code :
  1. String chaine = new String("pouet" );
  2.       Object o = chaine;
  3.       System.out.println(o.getClass().getName());


 
ça renvoit java.lang.String, essaye pour voir (je ne sais pas si ça marche)?


Message édité par krosso le 01-04-2003 à 11:38:28
Reply

Marsh Posté le 01-04-2003 à 11:39:29    

Cherrytree a écrit :

Classiquement, en Java on est amené à faire :
 

Code :
  1. MyObject m = (MyObject)o;


 
Maintenant si j'ignore que o est en fait du type MyObject, comment puis-je faire le bon cast, dynamiquement ?


Et avec DYNAMIC_CAST ?  
 
Oups, on parle de Java ici, pas de C++, sorry  :whistle:  
 
[:neowen]


---------------
Je code en série et en parallèle
Reply

Marsh Posté le 01-04-2003 à 11:40:05    

ça renvoit peut-être le bon type, mais je ne sais pas quoi en faire après, comment peut-on l'utiliser pour caster ?

Reply

Marsh Posté le 01-04-2003 à 11:44:49    

DarkLord a écrit :

bin tu dois savoir au minimum avec quoi tu travailles hein :o
 
instanceof peux te permettre de trouver le type
 
if (o instanceof MyObject)  
  // ... cast to MyObject


Y a pas un autre moyen ? Et avec getClass() ? Le truc c'est que getClass() retourne une classe et dans le cast, c'est une chaîne...


---------------
Le site de ma maman
Reply

Marsh Posté le 01-04-2003 à 11:46:11    

krosso a écrit :

Code :
  1. String chaine = new String("pouet" );
  2.       Object o = chaine;
  3.       System.out.println(o.getClass().getName());


 
ça renvoit java.lang.String, essaye pour voir (je ne sais pas si ça marche)?


Est-ce que qqn sait si ça marche ça ?


---------------
Le site de ma maman
Reply

Marsh Posté le 01-04-2003 à 11:47:49    

Le mieux c'est quand meme de savoir quels sont les types d'objets que tu es censé rencontrer ... S'il y en a vraiment trop, et que tu as besoin de faire un traitement particulier, ben faut faire une généralisation :/ Mais bon après ca depend vraiment du contexte ...


---------------
get amaroK plugin
Reply

Marsh Posté le 01-04-2003 à 11:47:54    

Cherrytree a écrit :


Est-ce que qqn sait si ça marche ça ?


Oui.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 01-04-2003 à 11:49:06    


Oui, ça marche, mais pas sur que ce soit utile  :D

Reply

Marsh Posté le 01-04-2003 à 11:49:06   

Reply

Marsh Posté le 01-04-2003 à 11:50:36    

krosso a écrit :


Oui, ça marche, mais pas sur que ce soit utile  :D  


+1
 
a part pour le debug, je suis pas convaincu de l'utilite de cette fonction ...
instanceof est a mon sens beaucoup plus utilisable


---------------
get amaroK plugin
Reply

Marsh Posté le 01-04-2003 à 12:05:38    

krosso a écrit :


Oui, ça marche, mais pas sur que ce soit utile  :D  


 
+1


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 01-04-2003 à 12:05:53    

bobuse a écrit :


instanceof est a mon sens beaucoup plus utilisable


 
c'est aussi mon avis  :whistle:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 01-04-2003 à 12:08:52    

DarkLord a écrit :


 
c'est aussi mon avis  :whistle:  


copaing !¡! [:runner11]


---------------
get amaroK plugin
Reply

Marsh Posté le 01-04-2003 à 12:20:09    

DarkLord a écrit :


 
c'est aussi mon avis  :whistle:  


J'aime bien instanceof. Le truc, c'est si j'ai 50 types différents sur lequel le cast peut porter, ça fait lourdingue.


---------------
Le site de ma maman
Reply

Marsh Posté le 01-04-2003 à 12:22:09    

Cherrytree a écrit :


J'aime bien instanceof. Le truc, c'est si j'ai 50 types différents sur lequel le cast peut porter, ça fait lourdingue.


 
ce qui est surtout lourdingue c'est que tu aies un objet donné qui puisse etre de 50 types différents. C'est ca le vrai problème à mon avis :/


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 01-04-2003 à 12:23:40    

DarkLord a écrit :


 
ce qui est surtout lourdingue c'est que tu aies un objet donné qui puisse etre de 50 types différents. C'est ca le vrai problème à mon avis :/


Je suis pas encore chef de projet. :hello: Pour l'instant je fais ce qu'on me dit.


---------------
Le site de ma maman
Reply

Marsh Posté le 01-04-2003 à 12:29:09    

Cherrytree a écrit :


Je suis pas encore chef de projet. :hello: Pour l'instant je fais ce qu'on me dit.


 
 :heink:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 01-04-2003 à 12:43:27    

Cherrytree a écrit :

Classiquement, en Java on est amené à faire :
 

Code :
  1. MyObject m = (MyObject)o;


 
Maintenant si j'ignore que o est en fait du type MyObject, comment puis-je faire le bon cast, dynamiquement ?


Ta question contient une contradiction. Soit tu connais, au moment d'écrire ton programme, le type réel de ton objet, et l'instruction ci-dessus est exactement ce que tu veux faire, soit tu ne connais pas le type de l'objet avant l'exécution, et  de nouveaux problèmes se posent, en particulier le suivant : comment caractérises-tu le type attendu ?
 
Si c'est par un objet de type Class, qui décrit la classe attendue, alors tu peux écrire :

Code :
  1. if (o.getClass() == myClass) { ...


 
Si tu te moques du type réel, mais que tout ce que tu sais, c'est que ton objet a une méthode toto() avec certains arguments bien particuliers, alors tu peux utiliser la réflexion (package java.lang.reflect) pour récupérer un objet de type Method et invoquer ainsi la méthode.
Mais si je peux me permettre, c'est carrément crade. Dans ce dernier cas, tu devrais au moins pouvoir définir une interface qui définit cette méthode commune, et qu'implémentent toutes tes classes candidates. En faisant cela, tu te ramènerais à faire un simple cast vers ce type interface ancêtre.


Message édité par BifaceMcLeOD le 01-04-2003 à 12:44:41
Reply

Marsh Posté le 01-04-2003 à 13:00:03    

Merci Biface. Avec ça tout est dit.
 
Dark > Je disais simplement que le projet sur lequel je suis est vieux de 2 ans, avec toutes les dérives que cela a inclu. Si le programme est crade, c'est que les interfaces de programmation, le framework n'arrêtent pas de changer. Je pense que ici personne n'est en mesure de gérer la situation. C'est l'anarchie, le pouvoir aux codeurs.


---------------
Le site de ma maman
Reply

Marsh Posté le 01-04-2003 à 13:41:25    

Cherrytree a écrit :

Merci Biface. Avec ça tout est dit.
 
Dark > Je disais simplement que le projet sur lequel je suis est vieux de 2 ans, avec toutes les dérives que cela a inclu. Si le programme est crade, c'est que les interfaces de programmation, le framework n'arrêtent pas de changer. Je pense que ici personne n'est en mesure de gérer la situation. C'est l'anarchie, le pouvoir aux codeurs.


et ca tourne ?  :ouch: [:totoz]


---------------
get amaroK plugin
Reply

Marsh Posté le 01-04-2003 à 13:43:24    

Cherrytree a écrit :

C'est l'anarchie, le pouvoir aux codeurs.


Je rêve depuis longtemps de travailler dans une telle boite...


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 01-04-2003 à 14:57:08    

bobuse a écrit :


et ca tourne ?  :ouch: [:totoz]


Non, bien sûr.


---------------
Le site de ma maman
Reply

Marsh Posté le 01-04-2003 à 14:59:31    

Harkonnen a écrit :


Je rêve depuis longtemps de travailler dans une telle boite...


Ah viens pas tout nous saccager ! [:zebra33]


---------------
Le site de ma maman
Reply

Marsh Posté le 01-04-2003 à 15:53:07    

Cherrytree a écrit :


Non, bien sûr.


 
haaaaaa....
vive les timer swing dans les servlets
vive la génération dynamique de HTML par servlet (PHP ? connais pas...)
vive les connexions qui ne se ferment jamais à la base...
vivent les projets qui fuient de partout
vive l'anarchie
 
"I am an anarchist !" [:yuck]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed