cs_soumia_info
Messages postés39Date d'inscriptionsamedi 26 mai 2007StatutMembreDernière intervention31 août 2007
-
24 juin 2007 à 08:48
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDerniè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
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 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... !!
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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 :
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);
}
}
}
}
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 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)