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 :

Type casting dynamique


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut Type casting dynamique
    Bonjour,

    Quelqu'un pourrait-il m'expliquer pourquoi la méthode suivante ne compile pas (cannot find symbol: class beanClass) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void printBeanId(String className, Object obj) throws ClassNotFoundException {
        Class beanClass = Class.forName(className);
        beanClass bean = (beanClass) obj;
        System.out.println("Bean Id: " + bean.getId());
    }
    Cette méthode est juste un exemple, mais j'aimerais utiliser ce principe (classe dynamique) afin de supprimer du code à double (ou la seule chose qui change est le type de mes objets) et j'aimerais faire cela sans interface...

    Merci d'avance pour vos réponses

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    beanClass bean = (beanClass) obj;
    Le compilo ne connait pas cette classe : beanClass

    Tu ne peux pas travailler au niveau dynamique ET demander au compilateur de connaître ce que tu fais .... c'est dans deux phase différentes

    par exemple pour faire un cast tu dois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void printBeanId(String className, Object obj) throws ClassNotFoundException {
        Class beanClass = Class.forName(className);
        if (beanClass.isInstance(obj)){
     /// tu as bien un objet de type className
    }
        System.out.println("Bean Id: " + bean.getId());
    }

    Bonne chance

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut
    Merci

    J'ai finalement réussi en utilisant getMethod() et invoke():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void printBeanId(Object bean) throws Exception {
      System.out.println("Bean(" + bean.getClass().getName() + ") ID : " +
        bean.getClass().getMethod("getId", new Class[0]).invoke(bean, new Object[0]));
    }
    ce qui me permet d'utiliser la même méthode pour tous mes beans qui ont une méthode getId() sans implémenter d'interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    printBeanId(new Account());
    printBeanId(new Sales());
    printBeanId(new Channel());
    Et ca marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Bean(beans.Account) ID : 1
    Bean(beans.Sales) ID : 1
    Bean(beans.Channel) ID : 1

  4. #4
    Invité
    Invité(e)
    Par défaut
    juste pour info :
    http://java.sun.com/javase/6/docs/ap...lang.Object%29
    je ne sais pas si ça aurait pu être utile ...

  5. #5
    Membre très actif
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Par défaut
    Une interface tuerais-t-il votre code ?
    Une simple "interface IndentifiedBean { int getId(); }" suffirais.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Citation Envoyé par Grimly Voir le message
    Une interface tuerais-t-il votre code ?
    Une simple "interface IndentifiedBean { int getId(); }" suffirais.
    Je pense qu'il a pour instruction : " faut toucher le moins possible au code existant ... on a peur que ça explose de partout "

Discussions similaires

  1. type SET dynamique ?
    Par pc.bertineau dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/02/2007, 17h28
  2. Réponses: 1
    Dernier message: 30/05/2006, 23h34
  3. Cast dynamique d'un objet ?
    Par elitost dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2006, 10h43
  4. [DP][héritage]sous-casting dynamique
    Par Le prophete dans le forum Général Java
    Réponses: 4
    Dernier message: 20/08/2004, 11h56
  5. [VB6] creation de variable de type string dynamiquement
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 12/06/2003, 16h59

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