Les paramétres annotés d'une méthodes

amani -  
 amani -
Bonjour,

comment récupérer les paramètres annotés d'une méthode en : je veux appeler les paramètres annotés des méthodes existantes dans une classe et les afficher.

for (Method m : TestClass.class.getMethods()) {
if (m.isAnnotationPresent(TestClass.annoteMe.class)) {
TestClass.annoteMe a = m.getAnnotation(TestClass.annoteMe.class);
String k = a.name();
system.out.println(a);

}
}

Cette boucle a pour rôle de chercher toutes les méthodes annotés dans la classe "TestClass" afficher leurs noms. Je vais faire une boucle analogue mais au lieu de chercher les méthodes annotés je veux retourner les paramètres annotés.
A voir également:

1 réponse

KX Messages postés 19031 Statut Modérateur 3 020
 
Le problème c'est que ce tu appelles "paramètres annotés" sont en fait des méthodes.

@interface Val
{
	double val(); // Méthode !!
}

Or ce n'est pas la seule méthode de l'annotation puisqu'elle va hériter d'Object et Proxy...
Mais tu peux toujours t'arranger pour faire le tri et affiner la recherche :

for (Method m : Test.class.getMethods())
for (Annotation a : m.getAnnotations())
for (Method x : a.getClass().getMethods())
	System.out.println(x.toGenericString());
0
amani
 
oui mon but est d'extraire les paramètres annotés, j'ai réussi parcourir les méthodes annotés maintenant je veux faire la même chose avec des paramètres annotés
par exemple:
@annoteMe(name = "annotationDeLaMethode")
public String Methode(

@paramAnnotation(paramName="param1")
String param
) {
return "return value";
}

j'ai bien définie mes deux annotations( de la méthodes:annoteMe et du paramètres:paramAnnotation) maintenant je veux parcourir les méthodes annotés ensuite leurs paramètres annotés et les affiché.
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Je ne vois pas trop à quoi ça peut te servir mais voici un exemple qui devrait faire ce que tu veux :

import java.lang.annotation.*;
import java.lang.reflect.Method;

public class Test
{
	@Retention(value=RetentionPolicy.RUNTIME)
	@Target(value=ElementType.METHOD)
	@interface Val
	{
		double val();
	}

	@Val(val=42)
	public void test()
	{
	}
	
	public static double getTestVal()
	{
		try 
		{		
			Annotation a = Test.class.getMethod("test").getAnnotation(Val.class);
			Method m = a.getClass().getMethod("val");
			return (Double) m.invoke(a);
		} 
		catch (Exception e)
		{
			e.printStackTrace();
			return Double.NaN;
		}
	}
	
	public static void main(String...Args)
	{
		System.out.println(Test.getTestVal());
	}
}
0
amani
 
pardon mais j'ai peut être mal expliqué les choses, vous avez placé une annotation "val" pour la méthode "test" mais dans le code que j'ai donné précédemment j'ai utilisés les annotations au niveau des paramètres de la méthode, pour le moment mon problème réside dans les paramètres annotés non pas la méthodes annotés.Mon but est d'extraire les méthodes annotés comme vous avez indiqués(c'est fait dans mon cas)la deuxième étape est d'examiner cette méthodes annotés et si elle contient des paramètres annotés, je dois les afficher.Mon problème est comment parcourir les paramètres annotés d'une méthode donnée?


@annoteMe(name = "annotationDeLaMethode")
public String Methode(

@paramAnnotation(paramName="param1")
String param
)
{
return "return value";
}

ici je m'intéresse aux paramètres annotés.
0
KX Messages postés 19031 Statut Modérateur 3 020
 
ça ne change pas grand chose...

import java.lang.annotation.*;
import java.lang.reflect.Method;

public class Test
{
	@Retention(value=RetentionPolicy.RUNTIME)
	@Target(value=ElementType.METHOD)
	@interface MethodVal
	{
		double val();
	}

	@Retention(value=RetentionPolicy.RUNTIME)
	@Target(value=ElementType.PARAMETER)
	@interface ParameterVal
	{
		double val();
	}

	@MethodVal(val=42)
	public void test(@ParameterVal(val=13) Double x)
	{
	}
	
	public static double getTestVal()
	{
		try 
		{
			
			Annotation a = Test.class.getMethod("test",Double.class).getParameterAnnotations()[0][0];
			Method m = a.getClass().getMethod("val");
			return (Double) m.invoke(a);
		} 
		catch (Exception e)
		{
			e.printStackTrace();
			return Double.NaN;
		}
	}
	
	public static void main(String...Args)
	{
		System.out.println(Test.getTestVal());
	}
}
0
amani
 
merci bcp cela fonctionne bien
0