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

Collection et Stream Java Discussion :

[Reflect] connaître la classe des éléments d'une collection


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut [Reflect] connaître la classe des éléments d'une collection
    Bonjour

    Je fais un algo avec de la réflexivité. Lorsqu'un field d'une classe est une collection, j'ai besoin de savoir qu'elle est la classe des éléments de la collection. Par exemple si j'ai un Set<String> j'aimerais obtenir la classe java.lang.String.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Class clazz = Toto.class;
    Field[] fields = clazz.getDeclaredFields();
    for (Field field : fields) {
        Class fieldClass = field.getType();
        if (Collection.class.isAssignableFrom(fieldClass)) {
            ParameterizedType type = (ParameterizedType) field.getGenericType();
            // TODO : Qu'est-ce-que je dois faire ici pour avoir la classe des éléments de la collection ?
        }
    ...
    J'ai lu les API sur Type, ParametrizedType, etc... Mais j'avoue que je ne comprends pas bien.

    Merci d'avance pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut
    C'est bon ! J'ai trouvé !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Class clazz = Toto.class;
    Field[] fields = clazz.getDeclaredFields();
    for (Field field : fields) {
        Class fieldClass = field.getType();
        if (Collection.class.isAssignableFrom(fieldClass)) {
            ParameterizedType type = (ParameterizedType) field.getGenericType();
            Object typeOrClass = type.getActualTypeArguments()[0];
    	if(typeOrClass instanceof Class){
    	    Class<?> collectionElementsClass = (Class<?>) typeOrClass;
                // J'ai la classe des éléments de la collection dans collectionElementsClass 
            }
        }
    ...

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 31/08/2012, 20h08
  2. Rajouter des éléments dans une collection depuis une autre classe
    Par Sup3rc0c0 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 15/03/2012, 17h48
  3. Réponses: 5
    Dernier message: 29/07/2010, 09h00
  4. [WPF] appliquer un converter a une propriété des éléments d'une collection
    Par maa dans le forum Windows Presentation Foundation
    Réponses: 17
    Dernier message: 23/01/2008, 21h39
  5. [VB.NET] Enregistrement des éléments d'une listBox
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 9
    Dernier message: 18/05/2004, 14h48

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