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] est-ce possible?


Sujet :

API standards et tierces Java

  1. #1
    Membre averti
    Inscrit en
    Février 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 21
    Par défaut [Reflection] est-ce possible?
    bonjour,
    voila je souhaite creer une fonction qui prend en parametre un object (Object) et le nom d'une methode (String)
    je souhaite avec ca executer cette methode sur cet objet et retourner le resultat de cet methode
    est-ce possible? et si oui comment svp

    merci d'avance

    ps:la methode invoqué n'a pas de parametre c'est un get tout simple

  2. #2
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    bizarre comme manip, c'est pas tres catho ....

    mais bon si tu n'as pas 15 mille methodes tu peux eventuellement faire qq chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public Object get (Object myObj, String methodeName){
     
        if (methodeName.equals(maMethode1)){
             return maMethode1(myObj);
        } else if (methodeName.equals(maMethode2)){
             return maMethode2(myObj);
        } etc ....
    }
     
    public static Object maMethode1(Object myObj){
        //traitement ....
    }

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    Il faut lire l'API sur la réflection en JAVA; c'est possible, mais il ne faut pas en abuser, à cause de la lenteur.

  4. #4
    Membre chevronné

    Homme Profil pro
    Indépendant
    Inscrit en
    Juin 2002
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 540
    Par défaut
    Bonjour,
    Tu peux jeter un coup d'oeil sur le concept d'introspection java.lang.reflect.*. Quand l'utiliser ? uniquement lorsque l'on a pas le choix. Je m'explique, dans le cas de l'implémentation d'un Runtime ou d'un modèle abstrait d'exécution.

    Ludo

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Par défaut
    En effet, on peut invoquer l'élégant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    classe.getClass().getDeclaredMethod("getChamp").invoke(classe)
    Exemple :

    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
    19
    20
    21
    22
    23
    24
    class ClasseContenantMethodeAAppeler {
     
        private String champ;
     
        public ClasseContenantMethodeAAppeler(String chaine) {
            this.champ = chaine;
        }
     
        public String getChamp() {
            return champ;
        }
    }
     
    public class Exemple018_introspectionMethode {
     
        public static void main(String[] args) {
            ClasseContenantMethodeAAppeler classe = new ClasseContenantMethodeAAppeler("coucou");
            try {
                String resultatDeLaMethode = (String) classe.getClass().getDeclaredMethod("getChamp").invoke(classe);
                System.out.println("Résultat de la méthode : "+resultatDeLaMethode);
            } catch (Exception e) { e.printStackTrace(); }
        }
     
    }
    Nicolas

  6. #6
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Par défaut
    Citation Envoyé par Alec6
    Il faut lire l'API sur la réflection en JAVA; c'est possible, mais il ne faut pas en abuser, à cause de la lenteur.
    c'est plus si lent dans les dernieres version de java... ok en 1.3, c'est pas terrible, mais depuis 1.4 c'est pas si penalisant

  7. #7
    Membre averti
    Inscrit en
    Février 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 21
    Par défaut
    merci a vous tous
    c'est exactement ca que j'avais besoin

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

Discussions similaires

  1. Est-il possible de bloquer le reverse engineering ?
    Par fugi dans le forum Assembleur
    Réponses: 39
    Dernier message: 31/07/2007, 02h33
  2. [IRC] -> Est-ce possible avec JBuilder ?
    Par MaTHieU_ dans le forum JBuilder
    Réponses: 4
    Dernier message: 26/08/2003, 17h24
  3. Réponses: 3
    Dernier message: 29/07/2003, 09h38
  4. Réponses: 2
    Dernier message: 16/05/2003, 10h14
  5. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22

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