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 :

Méthode générique qui renvoie une Map


Sujet :

Collection et Stream Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut Méthode générique qui renvoie une Map
    Bonjour,

    Je ne sais pas trop comment écrire une fonction générique du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private TreeMap < <T>, <U> > getMyMap  (String type){ 
     
    //Tantôt elle doit retourner (suivant valeur de "type"):
    //TreeMap<Integer, String> map1
     
    //Tantôt elle doit retourner (suivant valeur de "type"):
    //TreeMap<String, String> map2
     
    }
    Ce que j'ai écrit n'est manifestement pas la bonne syntaxe...
    Merci.

  2. #2
    Membre confirmé Avatar de Braillane
    Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2007
    Messages : 212
    Par défaut
    Deux problèmes :
    Le retour s'écrit TreeMap < T, U >
    T et U doivent être défini dans les paramètres sinon impossible de déduire le type de retour!

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    Citation Envoyé par Braillane Voir le message
    T et U doivent être défini dans les paramètres sinon impossible de déduire le type de retour!
    je ne comprend pas : peux-tu indiquer un exemple?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private TreeMap < K, V > getMyMap (TreeMap < K, V > mapToReturn, String type)
    ne fonctionne pas
    -V cannot be resolved to a type
    -K cannot be resolved to a type

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    En fait il semble que ce soit plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private < K, V > TreeMap < K, V > getMyMap (TreeMap < K, V > mapToReturn, String type)
    Mais j'ai un autre problème : dans un cas, le "K" doit être un Integer et dans mon traitement du coup le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mapToReturn.put(Integer.valueOf(myId), "toto");
    n'est pas accepté


    Il n'y a pas moyen de créer dans la fonction des Map avec des types différents suivants les cas?

  5. #5
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Je ne suis pas sûr ce comprendre ce que tu veux, mais est-ce que ceci répondrais à ton besoin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Map<U, V>getMyMap(Class<U> keyClass, Class<V> valueClass) {
        Map<U,V> myMap = new TreeMap<U,V>();
        // bla bla
       return myMap;
    }
    Avec comme utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Map<Integer, String> map1 = getMyMap(Integer.class, String.class);
    Map<String, String> map2 = getMyMap(String.class, String.class);

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    Je passe en "résolu" parce que j'ai fait autrement, en créant différentes fonctions (en fait, c'était pas une si bonne idée de faire une fonction générique pour des cas où on a des traitements différents).

    Cela dit, si c'était une bonne idée, la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Map<U, V>getMyMap(Class<U> keyClass, Class<V> valueClass) {
        Map<U,V> myMap = new TreeMap<U,V>();
        // bla bla
       return myMap;
    }
    ne compilerait pas non plus...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bonne pratique méthode qui renvoie une liste/tuple
    Par manticore dans le forum Général Python
    Réponses: 5
    Dernier message: 13/12/2011, 14h42
  2. Fonction qui renvoie une liste
    Par la_praline dans le forum GTK+ avec C & C++
    Réponses: 20
    Dernier message: 20/04/2007, 21h22
  3. [?] Fonction qui renvoie une table
    Par Dimitri_87 dans le forum Oracle
    Réponses: 2
    Dernier message: 05/04/2007, 11h48
  4. Requete sql vers ORACLE qui renvoi une erreur
    Par lilou77 dans le forum Oracle
    Réponses: 7
    Dernier message: 29/01/2007, 09h52

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