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

avec Java Discussion :

Récupérer la classe des objets d'une liste


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2014
    Messages : 54
    Points : 47
    Points
    47
    Par défaut Récupérer la classe des objets d'une liste
    Bonjour,

    J ai une liste d entiers comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    List<Integer> list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);

    Je me demande s il y a une methode qui permet de recuperer le nom de la classe des objets de la liste list, soit Integer.

    En fait, si j ecris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list.getClass().getName();
    je recupere List et non Integer.

    Auriez vous des idees? Merci de votre aide !!

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Points : 68
    Points
    68
    Par défaut
    Bonsoir,

    et bien si ta liste contient au moins un élément tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list.get(0).getClass().getName();

  3. #3
    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
    Fait comme ça, non, il n'y a pas moyen. Pour que cette information soit stockée quelque part et donc récupérable, il faut créer une sous-classe de la classe générique.

    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class MaClasse extends ArrayList<Integer> {....
    tu pourrais alors faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Type parametre = ((ParameterizedType)(MaClasse.getClass().getGenericSuperclass())).getActualTypeArguments()[0]; // récupère le premier argument générique du parent
    Class<?> classDeListe = (Class<?>)parametre;

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2014
    Messages : 54
    Points : 47
    Points
    47
    Par défaut
    Merci Tchize. Merci de ta reponse.

    Par contre je ne suis pas vraiment sur de t avoir bien compris.

    Tu peux me preciser un peu plus ton message stp ?

  5. #5
    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
    grosso modo, quand tu écris dans une déclaration de classe

    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    implements Machin<Truc>
    le compilateur inclue cette information "Truc" dans la classe qui fait ce implements/extends et cette information est accessible à ton code, via les appels de type Class.getGenericSuperClass().

    Par contre si tu écris


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Integer> maListe = new ArrayList<Integer>()
    cette informations "Integer" n'est stockée nulle part et donc inaccessible.

    Enfin, si tu déclare dans ta classe un champ:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private List<Integer> monChamp

    je pense aussi que l'information "Integer" est accessible via Field.getGenericType.

Discussions similaires

  1. OO et liste des objets d'une classe.
    Par alainbb dans le forum Langage
    Réponses: 1
    Dernier message: 03/01/2011, 17h35
  2. Comment Manipuler des objets dans une liste de type TList ?
    Par PadawanDuDelphi dans le forum Delphi
    Réponses: 1
    Dernier message: 02/11/2006, 15h40
  3. récupérer un objet dans une liste chainée
    Par marsuwhite dans le forum Langage
    Réponses: 4
    Dernier message: 05/06/2006, 14h05
  4. Récupérer un objet d'une liste déroulante
    Par Hell dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/01/2005, 14h59
  5. Réponses: 11
    Dernier message: 16/10/2004, 18h14

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