Java API réflexion???
Résolu/Fermé
A voir également:
- Java API réflexion???
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java décompiler - Télécharger - Langages
5 réponses
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
20 déc. 2011 à 00:55
20 déc. 2011 à 00:55
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?
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
20 déc. 2011 à 01:33
20 déc. 2011 à 01:33
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)
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
20 déc. 2011 à 01:54
20 déc. 2011 à 01:54
Regarde la documentation de RetentionPolicy
je fais comme vous m'avez dite , aucune erreur mais lorsque je fais run rien n'apparais qu'une liste des exceptions !! :(
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
20 déc. 2011 à 02:24
20 déc. 2011 à 02:24
Quelles 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?
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
>
amani
Modifié par KX le 20/12/2011 à 02:34
Modifié par KX le 20/12/2011 à 02:34
Enlèves les commentaires au System.out.println tu verras que ça marche
Le problème vient de ta hashMap, pour la remplir il faut utiliser put et non get.
Remarque :
Les trois premières lignes de ton main (clz, obj, maC) ne servent à rien, et tu peux enlever try/catch
Le problème vient de ta hashMap, pour la remplir il faut utiliser put et non get.
Remarque :
Les trois premières lignes de ton main (clz, obj, maC) ne servent à rien, et tu peux enlever try/catch
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 !!
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
20 déc. 2011 à 02:45
20 déc. 2011 à 02:45
Peut-être que c'est l'énoncé, mais elles ne servent à rien ces lignes, aucun de ces trois objets n'est utilisé dans la suite du code !
Pour put quel est l'erreur ?
Pour put quel est l'erreur ?
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
Modifié par KX le 20/12/2011 à 02:58
Modifié par KX le 20/12/2011 à 02:58
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);