Envoyé par
olivier.pitton
La méthode cast te permet de caster un objet dans la classe courante.
Oui.
Envoyé par
olivier.pitton
Par exemple :
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 :
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 :
1 2
| Object ob = new X();
X x = (X)ob; |
exemple 2 :
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 :
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 :
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.
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 :
if( class.forName("X").isInstance(hBeanObject) ) {
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.
Partager