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 :

Generics - connaitre le type manipulé


Sujet :

Langage Java

  1. #1
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut Generics - connaitre le type manipulé
    Comment faire en sorte que ce code fonctionne (il ne compile pas actuellement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class UserType<C extends FrmwrkEnumItem> {
     
        public Class returnedClass() {
            return C;
        }
    }
    L'idée est de pouvoir connaitre la classe du type paramétré.

    Merci !

    Anthony

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



    Ce code ne compile pas car les Generics ne conservent pas le type à l'exécution, et il n'est donc pas possible de le récupérer de la sorte...

    Si tu veux faire cela tu es obligé de le stocker manuellement, par exemple en passant le type au constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class UserType<C extends FrmwrkEnumItem> {
     
    	private final Class<C> returnedClass;
     
    	public UserType(Class<C> returnedClass) {
    		this.returnedClass = returnedClass;
    	}
     
    	public Class returnedClass() {
    		return this.returnedClass;
    	}
    }
    Mais cela a pour défaut de "complexifié" la création de l'objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UserType<FrmwrkEnumItem> u1 = new UserType<FrmwrkEnumItem>(FrmwrkEnumItem.class);

    Plus d'info : Les Generics ne sont pas des Templates comme les autres !

    a++

  3. #3
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    Merci pour ta réponse très détaillée !

    Le soucis, c'est que je n'ai pas du tout la main sur l'objet en question... Il est en effet instancié par un framework (Hibernate pour ne pas le citer).

    Il m'aurait donc fallu trouver une méthode pour connaitre le type au Runtime... Mais d'après tout ce que j'ai lu, je crains que cela soit impossible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public Class returnedClass() {
            Class clazz = null;
            TypeVariable[] parameters = this.getClass().getTypeParameters();
            for (TypeVariable variable : parameters) {
                clazz = variable.getClass();
            }
     
            return clazz;
        }
    Ce morceau de code retourne la classe de TypeVariable... Bien que variable.getName() retourne bien "C".

    Anthony

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/07/2010, 19h01
  2. Connaitre le type de character set
    Par vbcasimir dans le forum Administration système
    Réponses: 4
    Dernier message: 02/08/2005, 13h02
  3. [Types] Manipulation d'un array of const
    Par Clorish dans le forum Langage
    Réponses: 2
    Dernier message: 03/06/2005, 14h18
  4. Réponses: 10
    Dernier message: 27/04/2005, 11h26
  5. Connaitre le type de chaque col d'une table Paradox
    Par mjp dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/02/2005, 21h00

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