Invoker une méthode java
amani -
Je veux invoquer une méthode"method" qui se trouve dans la classe "TestClass" qui a deux paramètres String et String j'ai essayé:
String v =(String) method.invoke(TestClass.class.newInstance(),String.class,String.class);
ce code retourne une exception pourquoi?
- Invoker une méthode java
- Jeux java itel - Télécharger - Jeux vidéo
- Jeux java football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Jeux java itel touche ✓ - Forum Logiciels
- Jeux java itel 5360 - Forum Mobile
1 réponse
Le problème consiste à invoquer une méthode via réflexion dans TestClass qui attend deux paramètres String, alors que le code fournit String.class comme arguments, ce qui déclenche une exception.
La solution essentielle est que Method.invoke attend des valeurs effectives pour les paramètres, et non des objets Class; il faut passer des chaînes réelles ou des objets compatibles avec String à la place.
En pratique, il convient de récupérer ces valeurs (depuis une interface utilisateur ou une logique métier), puis de construire un tableau d’Object correspondant aux types attendus avant d’appeler Method.invoke.
Des conseils supplémentaires indiquent que déclencher l’invocation après le remplissage des composants GUI, par exemple via un bouton, évite l’évaluation précoce et les erreurs de type.
public class TestClass {
public String A ()
{
return "return value of method A";
}
public String B ()
{
return "B";
}
public static String loginAs(String username,String nom)
{
return "click";
}
public String C ()
{
return "return value of method C";
}
public String D ()
{
return "D";
}
}
J'ai pas trouvé une méthode a invoquer toute les méthodes de la meme facon
java.lang.IllegalArgumentException: argument type mismatch
public static String DoSomething(String x,String y)
{
return "result";
}
En faisant String.class tu passes deux paramètres de type Class, alors que tu veux des paramètres de type String ! Tu devrait donc mettre String.class.newInstance()
A contrario, loginAs étant static, il faudrait donc invoquer la méthode avec TestClass.class et non pas avec TestClass.class.newInstance() qui ne sert à rien !
String str = (String) TestClass.class.getMethod("loginAs", String.class, String.class ).invoke(TestClass.class, String.class.newInstance(), String.class.newInstance());