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 :

Reflection - récuperer le type générique d'une liste passer en argument de la méthode


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 62
    Points : 33
    Points
    33
    Par défaut Reflection - récuperer le type générique d'une liste passer en argument de la méthode
    Bonsoir à tous,

    Voila, je souhaiterais récupérer la class du type générique d'une liste mais cette liste est un paramètre de ma méthode.
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        private void getClass(List input) {
           //recuperer le type générique de la liste "input"
        }
    Sachant que cette méthode sera appellée avec en entrée un objet de type ArrayList<String>
    Ainsi j'aimerai récupérer le fait qu'il s'agit d'un type String
    Est ce possible?
    Merci d'avance pour votre aide

    Thomas

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 619
    Points
    21 619
    Par défaut
    Impossible.

    Les génériques servent à assurer la cohérence des types à la compilation. Ils n'existent plus après la compilation, et donc plus non plus à l'exécution. La réflexion n'y a donc pas accès.

    (Bon, et accessoirement... void getClass() ? Tu allais la récupérer où, cette info, si ça avait été possible ?)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    mm ok merci!
    En effet il s'agissait d'une méthode retournant un String, c'etait just epour l'exemple
    Donc il n'y a vraiment rien de possible?!
    Merci encore

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    réellement, il existe un cas particulier ou il est possible de récupérer le type généric.

    Plutôt qu'un long discourt voyons un exemple :
    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
    21
    22
    23
     
    public class TestGeneric {
     
    	public static void main(String[] args) {
    		StrList lst = new StrList();
    		testGenLst(lst);
    	}
     
    	public static void testGenLst(List<?> lst) {
     
    		Type tI = lst.getClass().getGenericSuperclass();
    		if (tI instanceof ParameterizedType) {
    			ParameterizedType p = (ParameterizedType) tI;
    			Class<?> genType = (Class<?>) p.getActualTypeArguments()[0];
    			System.out.println("type : " + genType.toString());
    			return;
    		}
    		System.out.println("Aucun type trouvé");
    	}
     
    }
    public class StrList extends ArrayList<String> {
    }
    Dans mon exemple strList est donc déjà typé en String.
    Petite précision, cela fonctionne aussi avec les interfaces.

  5. #5
    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,


    @ThomasParis : il faudrait surtout savoir ce que tu veux faire précisément ? (et non pas comment tu voudrais le faire)

    Pourquoi as-tu besoin du type concret ?

    a++

  6. #6
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    il faudrait surtout savoir ce que tu veux faire précisément ? (et non pas comment tu voudrais le faire)
    +1. La plupart du temps, une mauvaise idée conduit à un mauvais code.

Discussions similaires

  1. Récuperer valeurs de DDL dans une liste
    Par sasseur dans le forum C#
    Réponses: 1
    Dernier message: 12/02/2010, 20h52
  2. [AC-2007] Caractère générique dans une liste déroulante
    Par tibofo dans le forum IHM
    Réponses: 4
    Dernier message: 22/07/2009, 22h31
  3. Récuperer les derniers ID d'une liste
    Par Olv_m dans le forum Requêtes
    Réponses: 6
    Dernier message: 21/05/2008, 21h17
  4. Réponses: 1
    Dernier message: 24/04/2006, 01h55
  5. Récuperer le 2eme champ d'une liste déroulante
    Par priest69 dans le forum Access
    Réponses: 2
    Dernier message: 07/09/2005, 19h07

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