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 :

Message d'erreur: "Cannot create a generic array of ArrayList<Integer>" (compilation)


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Message d'erreur: "Cannot create a generic array of ArrayList<Integer>" (compilation)
    Bonjour,

    J'utilise Eclipse et ce dernier n'est pas content du tout lorsque j'ecrit cette ligne:

    ArrayList<Integer>[]s = new ArrayList<Integer>[4];

    Il ne serait donc pas possible de créer un tableau de ArrayList d'entier ?
    Si oui, comment ?

    Merci de m'aider

    PS : En ommetant le <Integer>, ca marche mais je dois utiliser des listes d'entiers pour la suite de mon code ...

  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,


    Les tableaux ne sont pas type-safe, c'est à dire que leurs types ne sont vérifié que lors de l'exécution et qu'il peuvent donc générer des ClassCastException...

    A l'inverse les Generics sont type-safe, c'est à dire qu'un code qui utilise les Generics ne devrait pas générer de ClassCastException s'il compile sans erreur ni warning. Pour cela, le type des objets est vérifié à la compilation..


    Bref la vérification des types est effectuée à deux moment totalement distinct, ce qui fait que la sécurité du typage apportée par les Generics ne peut pas être assuré lorsqu'on utilise des tableaux de type Generics...

    Cela est aussi en partie du à la perte du typage à l'exécution, ainsi qu'à l'héritage des tableau (ArrayList[] hérite de List[] qui hérite de Object[] etc...).


    Donc la création de tableau de type Generics est impossible.

    Tu peux le forcer en créant un tableau non typé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<Integer>[]s = new ArrayList[4];
    (tu obtiendras seulement un warning).

    Mais la meilleure solution serait d'utiliser une List :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<ArrayList<Integer>> s = new ArrayList<ArrayList<Integer>>();
    a++

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci pour votre aide. J'ai également un souci avec la méthode "remove" héritée de la classe List, et qui prend en paramètre un Objet o;

    J'ai dans ma liste des objets de même type mais avec des champs différents, comment faire pour supprimer de la liste un objet en fonction de son champ ?

    Je ne vois pas comment faire. Et j'ai aussi bcp de mal à voir comment fonctionne remove.

    Ps : c'est une liste d'objets "pion" avec le champ private int "couleur".
    l'objet pion est défini dans une classe pion avec un constructeur, des accesseurs construite en bonne et due PPO...

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Le remove supprime l'objet passé en paramètre de ta liste.

    Pour vérifier si ta liste contient le même objet que celui que tu demandes de supprimer, c'est la méthode equals() qui est appelée.

    Donc si tu as créé les classes des objets de ta liste, tu dois penser à surcharger la méthode equals(). Sinon ta méthode remove() ne se comportera pas comme tu l'attends.

    Pour t'en convaincre, essaye par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class MonEntier() {
       private int x;
       public MonEntier(int x) { this.x = x; }
     
       public static void main(String[] args) {
          MonEntier a = new MonEntier(1);
          MonEntier b = new MonEntier(1);
     
          System.out.println(a.equals(b));
       }
    }
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci,

    Ca marche en redéfinissant equals.
    A plus !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/09/2010, 17h12
  2. Réponses: 2
    Dernier message: 14/05/2010, 14h59
  3. Message d'erreur : "Can't create/write to file..".
    Par dimitri13 dans le forum Administration
    Réponses: 0
    Dernier message: 29/03/2010, 12h10
  4. Message d`erreur " error:cannot read : src/main/org/pache/tools/bzip2/*.java "
    Par wiss20000 dans le forum RedHat / CentOS / Fedora
    Réponses: 0
    Dernier message: 09/11/2007, 15h36
  5. Message d'erreur: Cannot find file ID 2
    Par glanumf dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 25/05/2007, 16h08

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