Invoker une méthode java

amani -  
 amani -
Bonjour,

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?

1 réponse

Résumé de la discussion

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.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Quelle exception ? Que contient la classe TestClass ? En particulier définit elle un constructeur par défaut ?
    6
    1. amani
       
      Voilà mon TestClass
      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
      0
    2. amani
       
      J'ai essayé d'invoker la méthode qui a deux String comme paramétres voila l'exception
      java.lang.IllegalArgumentException: argument type mismatch
      0
    3. amani
       
      comment invoker cette methode dans TestClass?
      public static String DoSomething(String x,String y)

      {
      return "result";
      }
      0
    4. KX Messages postés 19031 Statut Modérateur 3 020
       
      As-tu bien compris à quoi servait newInstance ? Tu l'utilises quand il faut pas, et tu l'oublies quand il faut !

      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());
      0
    5. KX Messages postés 19031 Statut Modérateur 3 020
       
      idem pour DoSomething
      0