Invoke Method reflection java

Signaler
Messages postés
8
Date d'inscription
vendredi 28 novembre 2014
Statut
Membre
Dernière intervention
29 avril 2015
-
Messages postés
8
Date d'inscription
vendredi 28 novembre 2014
Statut
Membre
Dernière intervention
29 avril 2015
-
Bonjour,

quelqu'un peut m'aider à invoquer une methode qui retourne un String et qui a 2 arguments String et int.
Exemple

class Calcul{
 public String formater(String texte, int valeur){
   return texte+" "+valeur;
}
public static void main(String[] args){
   Class clazz  = Class.forname(paquet.Calcul);
   Objet obj = clazz.newInstance();
  Method meth = class.getMethod("formater",...........) //je ne sais pas quoi mettre
// et aussi pour la suite :
  meth.invoke(obj,......)
} 
}


Merci

1 réponse

Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
122
Bonjour,

Déjà, même sans savoir quoi mettre en arguments, tu pourrais corriger les autres erreurs de ton code, parce que là c'est très approximatif !!!

package paquet;

import java.lang.reflect.Method;

public class Calcul {
    
    public String formater(String texte, int valeur) {
	return texte + " " + valeur;
    }
    
    public static void main(String[] args) throws Exception {
	Class clazz = Class.forName("paquet.Calcul");
	Object obj = clazz.newInstance();
	Method meth = clazz.getMethod("formater", ...); // je ne sais pas quoi mettre
	// et aussi pour la suite :
	meth.invoke(obj, ...);
    }
}

Ce qu'il te manque ce sont les arguments, donc un String et un int, sans oublier de récupérer le résultat sinon ça ne sert à rien...

Method meth = clazz.getMethod("formater", String.class, int.class);
String res = (String) meth.invoke(obj, "toto", 42);

Remarque : ce n'est pas le sujet, mais la méthode formater devrait être static, il n'y a aucun état interne pour les objets Calcul, du coup tu n'as pas besoin de faire un newInstance, ce qui est souvent dangereux car ça présuppose que tu as un constructeur vide, ce qui n'est pas toujours le cas.

package paquet;

import java.lang.reflect.Method;

public class Calcul {
    
    public static String formater(String texte, int valeur) {
	return texte + " " + valeur;
    }
    
    public static void main(String[] args) throws Exception {
	Class<Calcul> clazz = Calcul.class;
	Method meth = clazz.getMethod("formater", String.class, int.class);
	String res = (String) meth.invoke(null, "toto", 42);
	System.out.println(res); // toto 42
    }
}
Messages postés
8
Date d'inscription
vendredi 28 novembre 2014
Statut
Membre
Dernière intervention
29 avril 2015

Merci oui je vois , dac je veux pouvoir cooriger la suite
Bonne journée