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 :

[Generics][Tableaux][Collections] Tableau liste entiers


Sujet :

Collection et Stream Java

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Points : 6
    Points
    6
    Par défaut [Generics][Tableaux][Collections] Tableau liste entiers
    Bonjour !

    J'ai un souci avec la généricité.
    Dans un projet, j'ai besoin d'un tableau bidimensionnel, dont une des dimensions est fixe et l'autre pleinement variable.
    J'utilise donc le type ArrayList[]. Utilisant la version 1.5, afin de retirer le Warning, il m'a fallut typer comme celà ArrayList<Integer>[]. Cependant, lorsque je tente de faire new ArrayList<Integer>[10] par exemple, j'ai une erreur de compilation, j'ai essayé en déplaçant là généralisation après les crochets ou en entourant le type paramettré entre parenthèses avec ses paramètres, mais pas moyen de ne pas avoir d'erreur ou de warning.

    Quelqu'un aurait-il la méthode d'instantiation d'un tel type ?

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Meme probleme... je me demande bien pourquoi ce n'est pas supporte.

    Je n'ai pas essaye mais et en faisant Array.newInstance(ArrayList<Integer>.class, 10) ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

    Citation Envoyé par bouye
    Meme probleme... je me demande bien pourquoi ce n'est pas supporte.
    Il me semble qu'il peut y avoir des problèmes a cause de la perte du type paramétré à l'exécution... Certaines vérifications ne peuvent être effectuer qu'à l'exécution (et donc on perd la vérification des Generics)...

    Citation Envoyé par bouye
    Je n'ai pas essaye mais et en faisant Array.newInstance(ArrayList<Integer>.class, 10) ?
    On ne peut pas utiliser ArrayList<Integer>.class mais avec un cast cela peut marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Integer>[] tab = (List<Integer>[]) Array.newInstance(ArrayList.class, 10);
    Mais cela revient au même que de déclarer un tableau sans Genercis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Integer>[] tab = (List<Integer>[]) new List[10];
    Par contre il reste quand même un warning...


    Sinon pourquoi ne pas utiliser une List à la place du tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<List<Integer>> list = new ArrayList<List<Integer>>();
    a++

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Arf a trop faire l'aller retour entre le code du client en Java et le code du serveur C++ on en arrive a oublier que les Generics et le templates ne sont pas les meme choses et les limitations des uns et des autres.

    List<List<Integer>> list = new ArrayList<List<Integer>>();
    Ce n'est pas toujours faisable cependant puisque pas mal de fonctions de l'API necessitent un tableau (qui a dit Swing ?).

    Hum dans ce cas il y a un pb/conflit en utilisant l'une des methodes toArray() de l'objet list.

    Ceci ne passe pas, bien sur, a cause du probleme decrit plus haut.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    List<List<Integer>> listList = new LinkedList<List<Integer>>();
    ...
    List<Integer>[] listArray = new List<Integer>[listList.size()];
    listArray = listList.toArray(ListArray);
    Apres tests, il vaut mieux utiliser ca, et evidement des cast apres si on doit manipulater des elements du tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    List<List<Integer>> listList = new LinkedList<List<Integer>>();
    ...
    List[] listArray = new List[listList.size()];
    listArray = listList.toArray(ListArray);
    ...
    for (List list : listArray) {
      List<Integer> iList = (List<Integer>)list;
      ...
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    C'est vrai que l'on peux utiliser une List au lieu du tableau, mais, pour certaines raison, dont le fait que une List est une structure trop élaborée pour juste avoir un tableau de taille fixe d'éléments.
    C'est quand même frustrant de ne pas pouvoir simplement créer un tableau d'objets génériques !

Discussions similaires

  1. [Tableaux] If Tableau/Entier
    Par MarcO_- dans le forum Langage
    Réponses: 8
    Dernier message: 30/05/2007, 10h27
  2. Réponses: 2
    Dernier message: 15/02/2007, 22h00
  3. [Collection] Tri sur un tableau d'entier
    Par Grand sorcier dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 17/07/2006, 16h07
  4. [Tableaux] probleme unserialize dans un tableau(list)
    Par urikawa dans le forum Langage
    Réponses: 2
    Dernier message: 19/06/2006, 11h29
  5. Réponses: 2
    Dernier message: 24/05/2006, 19h26

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