IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[Introspection] Je n'arrive pas à récupérer l'annotation d'un champ


Sujet :

Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut [Introspection] Je n'arrive pas à récupérer l'annotation d'un champ
    Bonjour,

    Je fais de l'introspection et je n'arrive pas à récupérer l'annotation d'un champ.

    Voici mon annotation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public @interface Session {
    	public String name() default "";
    }
    Voici ma classe contenant le champ annoté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class Formulaire extends Form {
    	@Session
    	private Client client;
    }
    Et voici comment j'essaye de récupérer mon annotation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Field[] fields = this.getClass().getDeclaredFields();
    for (int i = 0; i < fields.length; i++) {
    	Field field = fields[i];
    	field.setAccessible(true);
    	try {
    		Session annotation = field.getAnnotation(Session.class);
    		//annotation est null
    	} catch (Exception e) {}
    }
    Merci pour votre aide.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Normalement, une annotation doit être en @Retention(RetentionPolicy.RUNTIME) pour être accessible par réflectivité.

    Par défaut, c'est RetentionPolicy.CLASS, et normalement ça ne suffit pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    je me permet d'intervenir dans ce post, une question sur les annotations.
    Voici la déclaration de l' annotation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
    public @interface MonAnnotation {
    	String value();
    }
    Une classe utilisant cette annotation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class Pair {
    	@MonAnnotation ("firstType") Object first;
    	@MonAnnotation ("secondType") Object second;
     
    public Pair(@MonAnnotation ("firstType2") Object f,
    	       @MonAnnotation ("secondType2") Object s) throws Exception {
     
    		Field firstField = first.getClass().getDeclaredField("first");
                    MonAnnotation a = firstField.getAnnotation(MonAnnotation.class);
    		first = f;
    		second = s;
    	}
    Après recherches, j'ai appris qu'un élément d'une annotation (qui est en fait une méthode) est automatiquement déclaré final : on ne peut pas le modifié à l'exécution !
    A défaut de pouvoir changer la valeur de l'annotation, peut-on changer l'annotation elle-même d'un champs ?

    Merci pour votre aide.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Jazzero Voir le message
    Après recherches, j'ai appris qu'un élément d'une annotation (qui est en fait une méthode) est automatiquement déclaré final : on ne peut pas le modifié à l'exécution !
    A défaut de pouvoir changer la valeur de l'annotation, peut-on changer l'annotation elle-même d'un champs ?
    Nope, il te faut un autre mécanisme, pour ça. Les annotations sont sourtout un mécanisme statique.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Merci Thelvin

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par Jazzero Voir le message
    Après recherches, j'ai appris qu'un élément d'une annotation (qui est en fait une méthode) est automatiquement déclaré final : on ne peut pas le modifié à l'exécution !
    A défaut de pouvoir changer la valeur de l'annotation, peut-on changer l'annotation elle-même d'un champs ?

    Merci pour votre aide.
    AspectJ vous permet de modifier une annotation au chargement de la classe via pertypewithin et staticinitialization, mais ce n'est pas non plus à l'exécution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/10/2009, 17h51
  2. je n'arrive pas à récupérer la valeur de ma variable globale
    Par beegees dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/03/2009, 14h24
  3. [MySQL] je n'arrive pas à récupérer l'id des membres dans la bdd
    Par nO_life dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 01/10/2008, 22h05
  4. Réponses: 0
    Dernier message: 04/05/2008, 18h07
  5. Réponses: 4
    Dernier message: 12/04/2006, 20h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo