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 :

Determiner le type de classe d'une collection generic


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 116
    Par défaut Determiner le type de classe d'une collection generic
    Salut,

    J'aimerais determiner le type de classe donner a une collection.
    ex de mon code qui ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public <Z extends EntityDb<ID>, ID extends Serializable> void exportAll(Collection<Z> collections,ContentHandler contentHandler, AttributesImpl atts) throws SAXException, InstantiationException, IllegalAccessException{
            ParameterizedType param = (ParameterizedType) collections.getClass().getGenericSuperclass();
     
            Class<Z> persistentClass = (Class<Z>) param.getActualTypeArguments()[0];
     
            getXMLSerializer(persistentClass).exportAll(collections, contentHandler, atts);
     }
    Cela ne marcherait si je passais une classe qui surcharge l'interface collection avec le parametre predefinis.
    Comment puis-je faire pour connaitre la classe de Z ?

    Merci.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    En transmettant en paramètre à ta méthode le .class du type désiré.

    Il n'y a pas d'autre moyens. Avec Java5, du moins : je ne me suis pas encore super intéressé aux fonctionnalités du 6.

  3. #3
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par dingoth Voir le message
    Il n'y a pas d'autre moyens. Avec Java5, du moins : je ne me suis pas encore super intéressé aux fonctionnalités du 6.
    Il n'y a pas d'autres moyens non plus avec Java 6... il faut utiliser un paramètre supplémentaire Class<Z>...


    a++

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 116
    Par défaut
    Lol, merci pour vos reponses.

    Je voulais faire cette méthode pour eviter de donner justement la classe.
    Car cela me fait ecrire, par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set<Template> templates = ...;
    session.getXmlFactory().getXMLSerializer(Template.class).exportAll(templates, xmlExport.contentHandler, new AttributesImpl());
    Je trouve cela un peu redondant, car la collection est deja paramétrée, et de lui donner en plus le type de classe...
    J'aurai aimé un truc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    session.getXmlFactory().exportAll(templates, xmlExport.contentHandler, new AttributesImpl());
    Dommage s'il n'y a pas de solution. Mais cela me parait bizarre, qu'il n'y ai pas cela dans l'API.
    Peut etre dans la 7, si les gens utilsent plus les generics.

    Merci qd meme...

  5. #5
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Je ne pense pas que ce soit un jour le cas : la généricité est justement que tu travailles sans avoir besoin de préciser la classe exacte.

    Ici tu es à la frontière entre les deux : tu travailles génériquement, mais tu dois tout de même dire, pour une classe que tu utilises dans le cadre de la généricité, mais qui n'est pas générique elle même, la classe concrète.

    Je trouve que le système des génériques java est un peu faible dans ce genre de cas.

    Ici, je te suggère, au lieu de passer en paramètre la collection Collection<Z> collections, de passer un tableau d'objet Object[] collection, tableau que tu typeras de l'extérieur de l'appel, là où tu connais le type Z.

    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Collection<Toto> collec;
     
    exportAll(collec.toArray(new Toto[collec.size()), ...
    Ainsi, le tableau, bien qu'il soit déclaré de classe Object[] dans la méthode exportAll, aura le type Toto[], et la méthode exportAll pourra facilement le retrouver par reflexion.

    Cela revient en fait à dégénérifier - excusez-moi - la méthode, pour ne lui passer que le raw type, selon le terme technique anglais, et peut être même qu'au lieu de donner comme déclaration un tableau d'objets, tu pourrais donner un tableau de EntityDB.

Discussions similaires

  1. [OpenGL 1.x] Conception d'une classe contenant une collection de sommets
    Par GilbertLatranche dans le forum OpenGL
    Réponses: 2
    Dernier message: 20/02/2014, 12h37
  2. Demande de type de classe d'une adresse IP
    Par L'aigle de Carthage dans le forum Protocoles
    Réponses: 5
    Dernier message: 09/02/2010, 16h49
  3. Classe representant une collection de clés et de valeurs
    Par dedicare dans le forum Framework .NET
    Réponses: 5
    Dernier message: 29/10/2006, 21h33
  4. [.NET2.0][C#]Passage type de classe dans une fonction
    Par SLE dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/06/2006, 15h48
  5. [VB6]Valeurs une collection renvoyée par la fonction d'une classe
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 30/03/2004, 11h04

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