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 :

Réccupération du type d'un objet dans une collection


Sujet :

Collection et Stream Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Réccupération du type d'un objet dans une collection
    Bonjour,

    Je veux faire un traitement générique qui explore une classe. Bon avec java.lang.Class j'ai pu récupérer toutes les propriétés d'une classe sauf dans le cas où j'ai une List de type List<Type>

    Soit l'exemple suivant :
    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
     
    public class Person {
    ...
    }
     
    public class Persons{
    private List<Person> persons;
     
    public List<Person> getPersons(){
    return persons;
    }
     
    public void setPersons(List <Person> persons){
    this.persons=persons;
    }
    ...
    }
    J'ai besoin de récupérer le type d'objet (Person) contenu dans la list persons
    avec persons.getClass(); je ne peut que récupérer une Class de type java.util.List

    Merci!!!

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu peux simplement pas par reflection.

    Quand tu fait

    public List<Person> getPerson()

    le compilateur génère du code pour

    public List getPerson()

    le type des paramètres d'un template est géré, en java, par le compilateur et non par la jvm, il n'a donc aucune utilité dans la classe compilé. Tu peux peut-être tenter ta change dans les annotation de la méthode, mais je doute que ce soit présent...

  3. #3
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    Bonsoir

    Et le gros problème est que la liste peut contenir des objets de types différents (sous classes de personnes évidemment).

    Rien n'empêche de parcourir la liste pour récupérer ces types.

    Le code suivant ne répond pas au besoin (si la liste est vide par exemple) ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public Collection<Class<?>> getTypes(List<?> list) {
      Set<Class<?>> types = new HashSet<Class<?>>();
      for (Object o : list) {
         types.add(o.getClass());
      }
      return types;
    }

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    Merci beaucoup pour vos réponses!!

    Avec les annotations, j'ai pas pu trouvé une solution à mon problème.

    En ce qui concerne le bout de code, il permet de récupérer le type à partir des objets contenus dans la liste. Mais le problème c'est que c'est à moi de la remplir dynamiquement selon le type de l'objet.

    En fait ce que je veux faire c'est remplir un Bean dynamiquement à partir d'un fichier .xml. Une méthode ayant la signature suivante:

    public static Objet remplirBean(String path,Class classBean);

    Bon il reste la solution suivante mais elle un peut moche:
    Créer une classe qui étende la classe ArrayList et qui prend en paramétre dans le constructeur le type des objets que la liste doit contenir. Ensuite imposer à l'utilisateur (Créateur de la classe de la bean) de l'utiliser.

Discussions similaires

  1. [VB.NET] Suppression d'objets dans une collection
    Par master56 dans le forum VB.NET
    Réponses: 7
    Dernier message: 03/06/2010, 21h46
  2. [PHP 5.0] Stocker des objets dans une collection
    Par kaljerhom dans le forum Langage
    Réponses: 3
    Dernier message: 10/04/2009, 21h38
  3. Trie par propriété d'objet dans une collection
    Par Gregory.M dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/11/2008, 15h29
  4. Méthode non acceptée : ajout d'un objet dans une collection
    Par Nzs26 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 09/11/2007, 19h31
  5. Hibernate + suppression d'objets dans une collection
    Par Saiyan54 dans le forum Hibernate
    Réponses: 2
    Dernier message: 15/12/2006, 15h39

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