Java API réflexion???
Résolu
amani
-
amani -
amani -
A voir également:
- Java API réflexion???
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
5 réponses
Sur le fond l'idée est la bonne, la mise en pratique est par contre à revoir.
Il y a également des problèmes de rétention de ton annotation et je ne sais pas si tu les as prises en compte ou pas, voici comment elle devrait être déclarée :
Enfin, voici un exemple, mais ce n'est pas le plus problématique ;-)
import java.lang.reflect.Method; public class Main { public static void main(String[] args) { for (Method m : TestClass.class.getMethods()) { if (m.isAnnotationPresent(annoteMe.class)) { annoteMe a = m.getAnnotation(annoteMe.class); String v = a.returnKey(); System.out.println("\""+v+"\" in "+m.toGenericString()); } } } }
Il y a également des problèmes de rétention de ton annotation et je ne sais pas si tu les as prises en compte ou pas, voici comment elle devrait être déclarée :
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface annoteMe { String returnKey(); }
Enfin, voici un exemple, mais ce n'est pas le plus problématique ;-)
public class TestClass { @annoteMe(returnKey="toto") public void toto() { } @annoteMe(returnKey="tata") public void tata() { } }
Merci bcp :) oui j'ai fait la classe TestClass mais mon probléme juste en Classe main en fait voiçi la classe TestClass
public class TestClass {
public @interface annoteMe
{
String returnKey();
}
@annoteMe(returnKey="A")
public String A ()
{
return "A";
}
public String B ()
{
return "B";
}
@annoteMe(returnKey="C")
public String C ()
{
return "C";
}}
celà est juste?
public class TestClass {
public @interface annoteMe
{
String returnKey();
}
@annoteMe(returnKey="A")
public String A ()
{
return "A";
}
public String B ()
{
return "B";
}
@annoteMe(returnKey="C")
public String C ()
{
return "C";
}}
celà est juste?
Je pense qu'il vaudrait mieux créer l'annotation dans un fichier un part, comme je l'ai faite tout à l'heure, cependant si tu tiens absolument à la mettre à l'intérieur de la classe TestClass il va falloir modifier quelques lignes dans le main, sans oublier de rajouter la rétention que j'ai mis mais pas toi :
public class TestClass { @Retention(RetentionPolicy.RUNTIME) public @interface annoteMe { String returnKey(); } @annoteMe(returnKey="A") public String A() { return "A"; } public String B() { return "B"; } @annoteMe(returnKey="C") public String C() { return "C"; } } public class Main { public static void main(String[] args) { for (Method m : TestClass.class.getMethods()) { if (m.isAnnotationPresent(TestClass.annoteMe.class)) { TestClass.annoteMe a = m.getAnnotation(TestClass.annoteMe.class); String v = a.returnKey(); System.out.println("\""+v+"\" in "+m.toGenericString()); } } } }
une question svp j'arrive pas à comprendre à quoi sert cette ligne @Retention(RetentionPolicy.RUNTIME)
je fais comme vous m'avez dite , aucune erreur mais lorsque je fais run rien n'apparais qu'une liste des exceptions !! :(
voilà ma classe TestClass
package exercice;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
*
* @author acer
*
*/
public class TestClass {
@Retention(RetentionPolicy.RUNTIME)
public @interface annoteMe
{
String returnKey();
}
@annoteMe(returnKey="A")
public String A ()
{
return "A";
}
public String B ()
{
return "B";
}
@annoteMe(returnKey="C")
public String C ()
{
return "C";
}
public String D ()
{
return "D";
}
@annoteMe(returnKey="E")
public String E ()
{
return "E";
}
}
****Voilà ma class main
package exercice;
import exercice.TestClass.annoteMe;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
/**
*
* @author acer
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try
{
Class clz = Class.forName("TestClass");
Object obj = clz.newInstance();
TestClass maC = ( TestClass ) obj;
HashMap hm = new HashMap();//istancier HashMap
for (Method m : TestClass.class.getMethods())
{
if (m.isAnnotationPresent(TestClass.annoteMe.class))
{
TestClass.annoteMe a = m.getAnnotation(TestClass.annoteMe.class);
String v = a.returnKey();
//System.out.println("\""+v+"\" in "+m.toGenericString());
hm.get(v);//enregister resultat via HashMap
}
}
}
catch ( java.lang.Exception ex )
{
ex.printStackTrace( );
}
}
}
pas d'erreur mais rien comme résultat!!! prk?
package exercice;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
*
* @author acer
*
*/
public class TestClass {
@Retention(RetentionPolicy.RUNTIME)
public @interface annoteMe
{
String returnKey();
}
@annoteMe(returnKey="A")
public String A ()
{
return "A";
}
public String B ()
{
return "B";
}
@annoteMe(returnKey="C")
public String C ()
{
return "C";
}
public String D ()
{
return "D";
}
@annoteMe(returnKey="E")
public String E ()
{
return "E";
}
}
****Voilà ma class main
package exercice;
import exercice.TestClass.annoteMe;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
/**
*
* @author acer
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try
{
Class clz = Class.forName("TestClass");
Object obj = clz.newInstance();
TestClass maC = ( TestClass ) obj;
HashMap hm = new HashMap();//istancier HashMap
for (Method m : TestClass.class.getMethods())
{
if (m.isAnnotationPresent(TestClass.annoteMe.class))
{
TestClass.annoteMe a = m.getAnnotation(TestClass.annoteMe.class);
String v = a.returnKey();
//System.out.println("\""+v+"\" in "+m.toGenericString());
hm.get(v);//enregister resultat via HashMap
}
}
}
catch ( java.lang.Exception ex )
{
ex.printStackTrace( );
}
}
}
pas d'erreur mais rien comme résultat!!! prk?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mais les 3 premières lignes sont faite pour créer une instance de la classe TestClass via API reflexion c'est l'énoncé de l'exercice qui a demandé ça !!
Ton instanciation de classe est bonne, on peut effectivement faire comme ça, je dis juste que c'est inutile dans ce code vu qu'après tu ne t'en sers pas... mais peut-être que dans la suite de ton exercice tu en auras besoin, je ne sais pas, en tout cas pas ici.
Quelles sont les clés/valeurs de ta table de hachage ?
Par exemple : hm.put(v,m);
Quelles sont les clés/valeurs de ta table de hachage ?
Par exemple : hm.put(v,m);