Probléme des paramétres

amani -  
 amani -
Bonjour,

Bonjour,

pour invoker une méthode m j'ai essayé ce

String v = (String) m.invoke(TestClass.class.newInstance());
Ce code est pour invoker une méthode m sans paramétres qui existe dans la classe "TestClass" et qui retoune un sting v qui est la valeur de retour de la méthode m.
J'ai essayé des méthodes sans paramétres dans la class TestClass et cele fonctionne mais si ajoute une méthoode avec paramétres, eclipse affiche que le nombre de paramétre
dans ce code est faux alors j'ai essayé ce code là(la cas géneral car on ne connait pas le nombre de paramétres exact de la méthode a invoker):
public static String[] getReturnedValues(Object...params){
{
int j=0;
try
{
{for (Method m : TestClass2.class.getMethods())

{
String v = (String) m.invoke(TestClass2.class.newInstance(),params);//ici je voulue //dire n'importe quel nombre de parmétres de n'importe quel type dans la méthode m
tab1[j]=v;
j++;
}
}
}
le problème est toujours le même et eclipse affiche que le nombre des paramètres et faux!!!

A voir également:

1 réponse

KX Messages postés 19031 Statut Modérateur 3 020
 
En faisant ta boucle for (Method m : TestClass2.class.getMethods()) tu itères toutes les méthodes de la classe et tu récupères l'objet String de retour, or il faudrait filtrer les méthodes qui :
1) ne renvoie pas String
2) n'ont pas autant d'arguments que params
3) n'ont pas les même types d'arguments que params
1
amani
 
Alors comment faire pour invoker n'importe quel méthode de n'importe quel nombre de paramétres et de n'importe quel types??
0
amani
 
Mon but en fait d'invoquer toute les méthodes de n'importe quelle structure, la boucle for est pour récupérer toutes le méthodes mais quelle est la forme générale pour les invoker?
0
amani
 
je suis vraiment coincé svp aidez moi
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Il est (je l'espère) facile à comprendre que tu ne peux pas invoquer toutes les méthodes de la classe avec les même arguments passés en entrée. Par exemple avec la classe String, ça n'a pas de sens d'invoquer toutes les méthodes avec les paramètres 5 et 12, car même si ça a un sens pour la méthode substring, ça n'en aura pas du tout pour la méthode toUpperCase !

Voici une manière de faire, ce n'est pas forcément idéal, mais la question que tu te poses est de toute façon trop tordue pour avoir une solution élégante...

class TestClass2
{	
}

class Data
{
	final boolean ok;
	final Object obj;

	Data()
	{
		ok=false;
		obj=null;
	}

	Data(Object o)
	{
		ok=true;
		obj=o;
	}
}

public class Test
{
	public static Data[] getReturnedValues(Object obj, Object...args)
	{			
		Method[] met = obj.getClass().getMethods();
		Data[] tab = new Data[met.length];
		
		for (int i=0; i<tab.length; i++)
		{
			try 
			{
				tab[i] = new Data(met[i].invoke(obj, args));
			}
			catch (Exception e)
			{
				tab[i] = new Data();
			}
		}
		
		return tab;
	} 
	
	public static void main(String...args) throws Exception
	{
		Data[] tab = getReturnedValues(TestClass2.class.newInstance());
		
		for (int i=0; i<tab.length; i++)
		{
			if (tab[i].ok)
				System.out.printf("%d : %s\n",i,tab[i].obj);
			else
				System.out.printf("%d :\n",i);
		}
	}
}
0
amani
 
merci bcp. la question qui se pose est:si j'ajoute une méthode x de n paramètres de n types est ce que je peux l'invoquer par la meme méthode(getReturnedValues)? Ma question est : si cette méthode est tjrs valable pour n'importe quelle méthode ?
0