Invoque une methode

cs_soumia_info Messages postés 39 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 31 août 2007 - 24 juin 2007 à 08:48
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 - 25 juin 2007 à 18:21
salut
comment invoque une methode a condition que on savoire pas ces parametre ?
j'ai fait
  Method[] mm=clz.getMethods();
                         for (int i=0;i<mm.length;i++)
                            {
                                try {
                               System.out.println("parametre"+mm[i].getParameterTypes());
                        this.invoke( mm[i] , new Object[]{mm[i].getParameterTypes()});
}catch ...............
merci d'avance

5 réponses

Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
24 juin 2007 à 14:13
Salut,

et en français ça donne quoi ?

Nan mais serieux faut arrêter de massacrer à ce point la langue française, ça devient pénible

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
24 juin 2007 à 19:12
la c'est chaud quand même ;o) dur dur à comprendre ...
autrement tout est dans la class Method ... ;o)
et ton bout de code il est sensé faire quoi ?!!! 
et logiquement tu dois connaitre les methodes que tu veux invoker... !! 

GodConan ;o)
0
cs_soumia_info Messages postés 39 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 31 août 2007
25 juin 2007 à 06:48
salut ,j'ai connu la methode mais pas ces parametres
merci de votre aide
0
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
25 juin 2007 à 10:59
Salut,

Ton code est faux....
Tu fais ça :
this.invoke( mm[i] , new Object[]{mm[i].getParameterTypes()});
or
les paramètres ne sont pas des Class mais des objets, ce qui est de
type Class est uniquement le type des paramètres...Maintenant si ton
but est de trouver la valeur associé à chaque type c'est plus ou moins
complexe dans le sens ou il te faut quand même connaître les valeurs
que tu dois passer et surtout connaître les différents objets que ta
méthode peut accepter... Bref pour trouver une relation entre le type
et l'objet tu peut faire :

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class Test {

    public static void main(String[] args) throws Exception {
        Class<?> cl = Class.forName("MObject");
        Object o = cl.newInstance();
        Method[] methods = cl.getMethods();
        for(Method m : methods) {
            String name = m.getName();
            //ce test permet de na pas toucher aux methodes wait, notify, etc... et toutes les autres méthodes de Object
            if(name.equals("myMethod")) {
                System.out.println("name : " + name);
                System.out.println("Param. Type : ");
                Class<?> cls [] =  m.getParameterTypes();
                //prepare les params
                Object params [] = new Object[cls.length];
                //maintenant pour chaque type il faut creer une instance valide
                for(Class<?> c : cls) {
                    System.out.print("\tclass : " + c);
                    //maintenant pour chaque objet il faut regarder le constructeur pour instancier l'objet
                    Constructor<?> constructors [] = c.getConstructors();
                    for(Constructor<?> constructor : constructors) {
                        //il faut utiliser quel constructeur ?
                        //il faut mettre quoi comme valeurs ?               
                    }
                }
                m.invoke(o, params);
            }
        }
    }
}

import java.awt.event.ActionListener;

public class MObject {

    public void myMethod(Object obj, String str, ActionListener al) {
        System.out.println("myMethod(" + obj + ", " + str + ", " + al + ")");
    }
   
    public void myMethod(int i, long l) {
        System.out.println("myMethod(" + i + ", " + l + ")");
    }
}

Tu
vois la problématique ? à quel niveau tu vas arrêter l'introspection ?
perso je ne sais pas vraiment ce que tu veux faire mais tu te diriges
vers une usine à charbon pour pas grand chose..... Si cela ne te
dérange pas prend sur toi, fais nous une explication (en français stp
sinon on ne vas pas comprendre et n'ai pas peur de passer ton texte
dans un correcteur....) sur ce que tu cherches à faire exactement,
histoire que nous puissions t'aiguiller vers une solution moins tirée
par les cheveux que celle dans la quelle tu t'orientes.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
25 juin 2007 à 18:21
Et oui la reflexiont ;o) c est soit pour faire joujou ;o) soit pour verifier l implementation des methode dont tu as besoin mais chaque fois tu doit savoir ce que tu vas mettre dedans ;o) sinon !!! ???? ben moi non plus je vois pas trop la finalité?!!  ;o)

GodConan ;o)
0