Salut,
Nouveau en Java, je voudrais savoir s'il y a une solution technique pour appeler une méthode d'une classe en connaissant son nom sous forme de "String".
Merci de votre aide.
Salut,
Nouveau en Java, je voudrais savoir s'il y a une solution technique pour appeler une méthode d'une classe en connaissant son nom sous forme de "String".
Merci de votre aide.
A ma connaissance ca n'éxiste pas.
Si jamais ca existe je suis preneur!!!
Salut tnarol,
Une solution à ton probleme serait par exemple d'utiliser switch ou des if:
Après cela depend de çe que tu veux vraiment!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public static final int METHODE1=0; public static final int METHODE2=1; .... gererMethodes(int meth){ switch(meth){ case METHODE1:methode1();break; case METHODE2:methode2();break; default:... } }
VIVE LA "REFLECTION" !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 // instancier un objet de la classe cible String monNom1 = "monpackage.MaClasse" Class maClasse = Class.forName(monNom1); MaClasse monObjet = (MaClasse) maClasse.newInstance(); // recuperer la methode cible de cette classe String monNom2 = "maMethode"; Class[] mesTypesDeParametre = new Class[] {Integer.class,Boolean.class}; Method maMethode = maClasse.getMethod(monNom2,mesTypesDeParametre); // appeler cette methode sur cette instance Object[] mesValeursDeParametre = new Object[] {new Integer(9),Boolean.FALSE}; Double monResultat = (Double)maMethode.invoke(monObject,mesValeursDeParametre);![]()
+1Envoyé par g_rare
Et pour plus de détail : Introspection en JAVA, présentation de l'API Reflection
a++
Super c'est exactement ça. Merci.Envoyé par g_rare
Si aucune méthode ne correspond je suppose que ça donne "maMethode == null" ????Envoyé par g_rare
VIVE LA JAVADOC !
Throws:
NoSuchMethodException - if a matching method is not found or if the name is "<init>"or "<clinit>".![]()
Attention tout de même à la visibilité de la méthode...
Si elle n'est pas public, ça va coincer... (faut voir setAccessible())
Sinon, tu peux utiliser getDeclaredMethods(), mais là, tu n'as pas accès aux méthodes héritées...
Envoyé par g_rare
OK donc si je veux ne rien faire si la méthode échoue je peux faire ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 try { Method maMethode = maClasse.getMethod(monNom2,mesTypesDeParametre); } catch (Exception e) { return; }
n'est ce pas ?
Bien sûr le but est d'éviter celà...Envoyé par iutcien
Partager