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

API standards et tierces Java Discussion :

[Reflection] Comment récupérer la valeur d'un champ statique d'une interface ?


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Par défaut [Reflection] Comment récupérer la valeur d'un champ statique d'une interface ?
    Bonjour,

    Je bloque sur un problème. J'utilise une API propriétaire, avec une javadoc livrée. Dans cette API, je traite des associations, définies par l'interface Association. Je ne connais pas le type précis de l'objet, je les manipule via un cast vers le type Association. L'API ne me permet pas en plus de créer manuellement des associations, il n'y a aucun point d'entrée pour le faire. En fait, je n'ai pas besoin de le faire d'ailleurs.

    Dans la déclaration de l'interface Association, il existe des champs statiques avec des valeurs entières. Je voudrais pouvoir récupérer ces valeurs, via une méthode qui prend en paramêtre le nom du champ.

    J'ai commencé à faire un bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public static int stringAssocTypeToIntAssocType( String assocType ) {
     
    		int val = -1 ;
     
    		try {
    			Field[] attrs = Class.forName( "com.example.Association" ).getFields();
     
    			for( int i=0; attrs!=null && i<attrs.length && val==-1; i++ ) {
    				if( attrs[i].getName().equals( assocType ) )
    					val = ... i don't know ...
    			}
     
    		} catch( Exception e ) {
    			e.printStackTrace();
    		}
     
    		System.out.println( val );
     
    		return val;
    	}
    Typiquement, j'ai 5 champs, tous entier et statique. Je voudrais utiliser la reflection pour récupérer la valeur de chacun d'entre eux, si possible. Je rappelle je ne peux pas instancier moi même une Association (sinon, j'aurais utiliser la méthode getInt de la classe Field, tout bêtement ...).

    Est-ce que qqun aurait une idée pour réaliser cela ? Est-ce possible ?

    Effectivement, je pourrais récupérer la valeur de chaque champs manuellement, en récupérant des associations préconstruites par l'API, en les notant sur un bout de papier, et en les réinjectant en dur dans mon code. Mais cette solution serait mon dernier recourt, elle n'est pas très propre à mon goût.

    J'attends vos réponse

  2. #2
    Membre éclairé Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Par défaut
    Si tes champs sont des champs entier et statique si jamais tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val = nom_du_champs_statique
    cela devrais être bon puisque tes champs sont des entiers.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Par défaut
    Oui mais justement, comme j'utilise une API proprio, celle-ci peut très bien évoluée, et des valeurs êtres ajoutées ou bien supprimées.

    C'est pourquoi je ne veux pas les utiliser en dur dans le code (comme tu suggères) mais à la volée. Cette partie du code le permettant, ca semble être plus judicieux.

    Mais en fait j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val = attrs[i].getInt( attrs[i].getGenericType() );

  4. #4
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Class.getDeclaredField(name).get(null);

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Par défaut
    ah yes, merci. Ca réduit considérablement le code

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

Discussions similaires

  1. Comment Récupérer la valeur d'un champ FormView
    Par MEHDIJS dans le forum ASP.NET
    Réponses: 1
    Dernier message: 14/04/2011, 18h16
  2. Comment récupérer les valeurs d'un champ..
    Par KOTEKOI dans le forum MFC
    Réponses: 5
    Dernier message: 11/03/2011, 22h23
  3. Comment récupérer la valeur d'un champ radio ?
    Par Alexandrebox dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 04/06/2009, 20h57
  4. Comment récupérer la valeur d'un champ HTML ?
    Par Ekimasu dans le forum Flex
    Réponses: 5
    Dernier message: 26/07/2007, 14h55
  5. Réponses: 7
    Dernier message: 15/09/2005, 06h37

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