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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    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 averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    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 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    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
    Par défaut
    Merci Thelvin

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    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