IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Caster des objets dynamiquement


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Points : 10
    Points
    10
    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

  2. #2
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    La méthode cast te permet de caster un objet dans la classe courante. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Object ob = new X();
    X x = (X)ob;
    exemple 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Dans tout ça j'avoue que je n'arrive pas à comprendre pourquoi tu voulais faire un cast de ton objet ....

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    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.

Discussions similaires

  1. déclaration des objet dynamiquement
    Par membreComplexe12 dans le forum C++
    Réponses: 19
    Dernier message: 21/05/2012, 09h23
  2. Evenement move sur des objets dynamique
    Par thierry007 dans le forum VB.NET
    Réponses: 8
    Dernier message: 10/04/2012, 14h06
  3. [Débutant] Ajouter des évènements sur des objets dynamiques
    Par fdthierry dans le forum VB.NET
    Réponses: 6
    Dernier message: 30/09/2011, 17h30
  4. créer des objets dynamiquement
    Par lenul dans le forum C++
    Réponses: 17
    Dernier message: 03/04/2008, 06h35
  5. Des objets dynamiques?
    Par ben_ghost dans le forum VC++ .NET
    Réponses: 5
    Dernier message: 04/08/2006, 17h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo