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 :

Tableau d'ArrayList paramétrées


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut Tableau d'ArrayList paramétrées
    Bonjour !

    J'ai regardé dans le tutorial sur les Listes paramétrées et j'ai un problème lors de leur utilisation.

    Voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		ArrayList<?>[] test = new ArrayList<?>[2];
    		for(ArrayList<?> a: test) a = new ArrayList<String>();
    		test[0].add("Bonjour");
    Et j'ai l'erreur suivante sur le add() :

    The method add(capture-of ?) in the type ArrayList<capture-of ?> is not applicable for the arguments (String)

    Où est-ce que je me trompe ?

  2. #2
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<?>[] test = new ArrayList<?>[2];
    Tu as déclaré ta variable test comme un tableau d'ArrayList de type ? forcement quand tu fait le add(), java s'attend à avoir qqch de type ? et non pas String.

    Donc pour résoudre ton problème remplace tous tes ? par String.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut
    Euh, ça j'ai déjà essayé, et c'est pas possible. En fait j'ai basé mon test sur cette déclaration de la faq java, rubrique "Java 5.0 et les types Paramétrés" (je précise que j'utilise java 6):

    Il est intéressant que seuls les jokers non contraints permettent la création de tableaux paramétrés. Il est par exemple impossible de déclarer un tableau de 42 listes de Double :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Double>[] tableau = new ArrayList<Double>[42];
    Cette limitation sert une fois de plus à protéger le code lors de l'exécution car il serait sinon possible de manipuler le tableau comme un tableau d'Object et d'en changer le contenu sans se soucier des types paramétrés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Object[] tab = (Object[]) o;
    o[0] = new ArrayList<String>();
    Cet exemple contribuerait à insérer une liste de chaînes de caractères dans un tableau supposé ne contenir que des listes de Double. Voilà pourquoi seuls les jokers sont autorisés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<?>[] tableau = new ArrayList<?>[42];
    Donc le truc, c'est que pour la définition, ça a pas l'air de poser de problèmes, mais pour la manipulation ... Si j'oublie la paramétrisation, il me fout des warnings partout, et je suis obligé de caster dans tous les sens ...

  4. #4
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Par défaut
    Effectivement j'ai dis une bétise ^^
    Sinon si tu veux pas de warning tu peux toujours rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @SuppressWarnings("unchecked")
    Du coup tu aurais qqch comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ArrayList<Double> []test;
        @SuppressWarnings("unchecked")   
    	test=new ArrayList[42];
    	for (int i=0; i<42;i++)
    	    test[i]=new ArrayList <Double>();
    Enfin bon ca résoud pas ton problème mais ca enlève les warnings.

    Sinon tu peux faire un ArrayList<ArrayList<Double>>
    En gros ton code ressemblera à cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ArrayList<ArrayList<Double>> test;
    	test=new ArrayList<ArrayList<Double>>();
    	test.add(new ArrayList<Double>()); // pour ajouter un élément à test
    	test.get(0).add(5.0);  // pour ajouter des valeurs aux éléments de test
    	test.get(0).add(4.0);

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut
    J'aime pas trop utiliser les SuppressWarnings, mais on va dire que je suis obligé ce coup ci ... L'essentiel, c'est que ça marche !! Merci pour tes réponses !

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Pourquoi as-tu besoin de faire un tableau d'ArrayList?
    Il vaut mieux éviter de mélanger les collections et les tableaux...

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

Discussions similaires

  1. passer un tableau 2D en paramètre de fonction
    Par akrobat dans le forum C++
    Réponses: 1
    Dernier message: 27/04/2006, 16h48
  2. [D7] passer un tableau dynamique en paramétre ?
    Par PhD13 dans le forum Langage
    Réponses: 6
    Dernier message: 11/01/2006, 18h09
  3. Passage de tableau dynamique en paramètre
    Par Didier L dans le forum Langage
    Réponses: 3
    Dernier message: 08/09/2005, 23h04
  4. Passage d'un tableau javascript en paramètres d'une URL
    Par seblo_scoqi dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 02/09/2005, 10h46
  5. Comment passer un tableau dynamique en paramètre ?
    Par Charette dans le forum Langage
    Réponses: 2
    Dernier message: 21/04/2005, 11h28

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