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

Langage Java Discussion :

Retrouver le type d'une property à partir de son nom


Sujet :

Langage Java

  1. #1
    Invité
    Invité(e)
    Par défaut Retrouver le type d'une property à partir de son nom
    Bonjour,

    Je me pose quelques questions sur la réflexion en java.
    Est-ce qu'il existe déjà dans une API quelconque (l'API de base, une API Apache ou autre) une méthode permettant de récupérer le type d'une propriété en passant en paramètre le nom de cette propriété et la CLASSE du bean qui nous intéresse.

    Je sais qu'il existe déjà des méthodes qui permettent de retrouver le type d'une propriété (et même d'une nested property) à partir de son nom et d'une instance du bean qui nous intéresse, mais j'ai besoin de connaître le type de la propriété avant même de disposer d'une instance du bean.

    Quelqu'un a-t-il déjà vu une classe proposant des méthodes de ce type ? Sinon je ferai ma propre méthode à partir des outils de réflexion java... Mais ça risque d'être compliqué.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    1. Class c = Class.forName( "package.MaClasse" )
    2. Field champs = c.getField( "monChamps" )
    3. Class classChamps = champs.getType()
    4. classChamps.getName()

    C'est ce que tu cherches ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Pas vraiment. Je cherche à manipuler les propriétés d'un bean (d'après les conventions JavaBean), pas les champs de l'objet. Ca fait une grosse différence.

    Dans le même type que ce que tu me proposes je pourrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BeanInfo info =
    	Introspector.getBeanInfo(Class.forName(<Le nom de ma classe>));
    
    PropertyDescriptor[] properties = info.getPropertyDescriptors();
    for (int i = 0; i < properties.length; i++) {
    	if (name.equals(properties[i].getName())) {
    		return properties[i].getPropertyType();
    	}
    }
    Le problème c'est que ce code ne permet pas d'accéder au type de nested properties.

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu peux utiliser la classe Introspector qui permet de récupérer la description d'un beans, et donc de ses propriétés.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		BeanInfo beanInfo = Introspector.getBeanInfo(String.class);
    		for (PropertyDescriptor descr : beanInfo.getPropertyDescriptors()) {
    			System.out.println("Name         : " + descr.getName());
    			System.out.println("Display Name : " + descr.getDisplayName());
    			System.out.println("Description  : " + descr.getShortDescription());
    			System.out.println("Type         : " + descr.getPropertyType());
    			System.out.println("Read Method  : " + descr.getReadMethod());
    			System.out.println("Write Method : " + descr.getWriteMethod());
    			System.out.println();
    		}

    a++

  5. #5
    Invité
    Invité(e)
    Par défaut
    Dsl j'ai édité mon post précédent

    Effectivement j'avais trouvé l'Introspector mais les méthodes des classes du package java.beans ne permettent pas d'accéder à des nested properties. Si ça n'existe vraiment pas je créerai ma propre méthode, mais ça m'embêterai de refaire quelque chose qui existe déjà.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Encore une question plus ou moins liée : Si je récupère dynamiquement une classe à partir d'un objet Set<T>, je pourrais accéder au type paramètre ?

    Il me semble que les types paramétrés ne sont visibles qu'à la compilation et pas à l'exécution mais on est jamais à l'abri d'une bonne surprise

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 21
    Points
    21
    Par défaut
    Tu as de la raison, les types parametres ne sont pas visibles apres la compilation. Ca s'appelle type erasure: http://java.sun.com/docs/books/tutor...s/erasure.html
    TPReal.

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/04/2007, 21h20
  2. Créer une Form à partir de son nom
    Par Delphi-ne dans le forum Delphi
    Réponses: 11
    Dernier message: 11/12/2006, 17h39
  3. Réponses: 7
    Dernier message: 29/11/2006, 11h32
  4. [VBA] Lancer une form à partir de son nom
    Par truman dans le forum Général VBA
    Réponses: 28
    Dernier message: 18/05/2006, 14h41
  5. Récupérer une variable à partir de son nom ...
    Par CynO dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/10/2005, 16h59

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