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

API standards et tierces Java Discussion :

[Reflection]Instanciation d'object en parametre d'une méthode


Sujet :

API standards et tierces Java

  1. #1
    Membre confirmé

    Profil pro
    Laveur
    Inscrit en
    Avril 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Laveur

    Informations forums :
    Inscription : Avril 2004
    Messages : 142
    Par défaut [Reflection]Instanciation d'object en parametre d'une méthode
    Bonjour,

    J'ai vu pas mal de topic sur la reflexion mais je m'enfonce

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    methode(ArrayList list, String nom_objet){
    Iterator it = list.iterator();
    ...
       while(it.hasNext()){
          <Classe_nom_objet> c = (<cast_nom_objet>) it.next();
          // utilisation de l'instance de c
       }
     
    }
    Je voudrais que ma méthode soit capable d'utiliser les getters d'un objet mis en paramètre contenu dans l'ArrayList.

    quelqu'un aurait il un bout de chemin à me montrer ?

    Merci d'avance.

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    methode(ArrayList list<Classe_nom_objet>, String nom_objet){
    Iterator it = list.iterator();
    ...
       while(it.hasNext()){
           Classe_nom_objet c =  it.next(); // pas besoin de Cast
          // utilisation de l'instance de c
     
       }
     
    }

  3. #3
    Membre confirmé

    Profil pro
    Laveur
    Inscrit en
    Avril 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Laveur

    Informations forums :
    Inscription : Avril 2004
    Messages : 142
    Par défaut
    D'abord merci d'avoir aussi vite répondu
    mais je comprends pas cette partie :

    methode(ArrayList list<Classe_nom_objet>, ...)

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    c'est les types generic de java 5.0.
    tu donne le type d'objet que prend ta liste..ta méthode prend toute liste qui contient des objets de type Classe_nom_objet.

  5. #5
    Membre confirmé

    Profil pro
    Laveur
    Inscrit en
    Avril 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Laveur

    Informations forums :
    Inscription : Avril 2004
    Messages : 142
    Par défaut
    Oups pardon alors parce que ma notation n'est pas bonne
    je suis en 1.4

    c'est à l'execution qu'on connait le type d objet

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    ahh ok..

    quand tu cast
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Classe_nom_objet c = (cast_nom_objet) it.next();
    ça ne fonctionne pas ?

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Pourquoi as-tu besoin de caster dans le type exacte de l'objet ?

    a++

  8. #8
    Membre confirmé

    Profil pro
    Laveur
    Inscrit en
    Avril 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Laveur

    Informations forums :
    Inscription : Avril 2004
    Messages : 142
    Par défaut
    non parce que je ne sais pas quoi mettre dans le cast et quoi récupérer à partir du string en parametre.

    Je voudrais pourvoir récupérer une instance a partir du string et de caster le it.next()

  9. #9
    Membre confirmé

    Profil pro
    Laveur
    Inscrit en
    Avril 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Laveur

    Informations forums :
    Inscription : Avril 2004
    Messages : 142
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Salut,
     
    Pourquoi as-tu besoin de caster dans le type exacte de l'objet ?
     
    a++
    Je veux par la suite utiliser les getters de l'objet mis en parametre.

  10. #10
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Tu ne peux pas créer une interface ou une classe abstraite commune à tout tes objets ???

  11. #11
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu peux montrer le code ou tu ajoute les éléments dans ta liste.

  12. #12
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Si c'est bien ca que tu veux faire voici un exemple pour la methode length() de String a toi d'adapter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
        String truc = "toto";
        ArrayList list = new ArrayList();
        list.add(truc);
        Iterator it = list.iterator();
        Method[] methList = null;
        Object obj = null;
        while (it.hasNext())
        {
          obj = it.next();
          methList = obj.getClass().getMethods();
          for (int ind = 0; ind < methList.length; ind++)
          {
            if (methList[ind].getName().startsWith("len"))
            {
              System.out.println("result = " + methList[ind].invoke(obj, null));
            }
          }
        }
    enjoy,

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  13. #13
    Membre confirmé

    Profil pro
    Laveur
    Inscrit en
    Avril 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Laveur

    Informations forums :
    Inscription : Avril 2004
    Messages : 142
    Par défaut
    Ca m'a l'air plus simple que je ne pensais.

    Merci je vais essayer.

  14. #14
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mezoo
    Je veux par la suite utiliser les getters de l'objet mis en parametre.
    Dans ce cas tu ne peux pas utiliser la généricitée :
    • Soit tu appelles une méthode d'une classe existante, et ta méthode ne pourra fonctionner qu'avec cette classe (et donc tu utilises un cast standard).
    • Soit tu définis une interface qui décrit les méthodes que tu pourras appeller, et les objet devront implémenter cette interface. Il faudra alors faire un cast explicite vers le type de cette interface...
    a++

  15. #15
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Pourquoi utiliser l'introspection ????

    Si tu veux utiliser les getter et les setter tu as la classe PropertyDescriptor dupackage java.beans et les méthodes getWriteMethod pour le setter et getReadMethod et pour le getter.

    Sinon si tu peux modifier la hiérarchie des classes tu peux utiliser une interface commune, genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface Accesseurs {
       public Object get(int type);
       public void set(int type, String value);
    }
    et en charge à toi dans l'implémentation de ton interface de rediriger l'appel vers le bon getter ou le bon setter suivant le paramètre "type", un peu sur le principe des DynaBean, ce qui est à mon avis une solution plus élégante et moins lourde.

    A+

  16. #16
    Membre confirmé

    Profil pro
    Laveur
    Inscrit en
    Avril 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Laveur

    Informations forums :
    Inscription : Avril 2004
    Messages : 142
    Par défaut
    J'avais pensé à l'interface mais je suis pas sur que le mec qui reprenne le code l'implémentera.

    En tout cas merci pour toute ces pistes.

  17. #17
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Ben il n'aura pas le choix, sinon il aura une ClassCastException !!!

  18. #18
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Citation Envoyé par thibaut
    Pourquoi utiliser l'introspection ????

    Si tu veux utiliser les getter et les setter tu as la classe PropertyDescriptor dupackage java.beans et les méthodes getWriteMethod pour le setter et getReadMethod et pour le getter.
    Si je ne m'abuse ca te retourne finalement un objet de type Method donc tu en reviens tout de meme a de la reflection a la difference pres que tu dois connaitre a l'avance tout les noms des proprietes ce qui n'est pas forcement le cas.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  19. #19
    Membre confirmé

    Profil pro
    Laveur
    Inscrit en
    Avril 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Laveur

    Informations forums :
    Inscription : Avril 2004
    Messages : 142
    Par défaut
    Je fais un truc assez simple, je ne vais que prendre les methodes "get"
    Ce qui est un peu dangereux dans le cas ou un objet créer une méthode autre qu'un getter et qui commence par "get"

  20. #20
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Par défaut
    Si tu sais déjà quels variables tu veux récupérer, le mieux est d'utiliser une interface qui déclare les getters. En revanche, si tu veux pouvoir appeler tous les getters, quelqu'ils soient et quelque soit le type d'un objet, le mieux est d'utiliser la solution que te propose thibaut. Le mapping des beans utilise l'instrospection mais il veille aussi à ce que le bean soit correctement construit sans quoi PropertyDescription lève une IntrospectionException. Les méthodes commençant par get seront alors uniquement des accesseurs.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/10/2009, 11h00
  2. changer automatiquement les parametres d'une méthode
    Par wariom dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 19/05/2009, 09h45
  3. Réponses: 6
    Dernier message: 21/06/2005, 10h14
  4. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

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