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

Java Discussion :

Tableau de Vecteurs


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Billets dans le blog
    1
    Par défaut Tableau de Vecteurs
    Bonjour,

    j'essaye le code suivant (Component est une classe que je développe) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector<Component>[] ckf = new Vector<Component>[n];
    javac me lance alors directement une erreur de compilation : "generic array creation" et refuse de compiler la suite.

    Si j'essaye le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector<Component>[] ckf = new Vector[n];
    le compilateur fait la compilation mais me lance le warning suivant :
    found : java.util.Vector[]
    required: java.util.Vector<Component>[]

    Comment instancier correctement un tableau de Vector typé ? Comment ne plus générer ce warning ?

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    de part la nature fondamentalement contradictoire des génériques et des tableaux, c'est impossible. En tout cas impossible de le faire correctement.
    En gros tu demandes comment faire correctement une vérification de type qu'il est impossible de vérifier. On ne peut pas correctement faire quelque chose d'impossible.

    Le plus simple est d'utiliser une ArrayList à la place d'un tableau. (ArrayList accepte ce problème de part le fait qu'elle prend elle-même les mesures pour assurer ce qui ne peut pas l'être par le compilateur. Elle reconnaît les warnings comme étant légitimes et gérés à la place par son propre fonctionnement.)

    Et pendant qu'on y est, Vector est une classe obsolète. Lui-même devrait probablement être remplacé par ArrayList. A moins que sa nature synchronisée te soit effectivement nécessaire, auquel cas il faut quelque chose comme Collections.synchronizedList() sur une ArrayList.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre expérimenté
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Billets dans le blog
    1
    Par défaut
    Le projet sur lequel je travaille, AnAcondA, a près de 20 ans d'âge. C'est pourquoi on peut y retrouver des classes comme Vector. J'ai une classe où il y a des tableaux à trois dimensions de Vector. Je ne vois pas par quoi je vais pouvoir remplacer ces Vector[][][] . J'ai essayé de travailler en construisant une ArrayList<Vector<Component>> puis de faire un toArray pour construire ma classe de tableau de Vector mais il me lance une ClassCastException à l'exécution. Je ne sais vraiment pas quoi faire.

    Pour ce qui est de remplacer les Vector par des ArrayList, effectivement je n'ai pas besoin d'avoir des listes synchronisées mais je cherche des listes les plus simples possibles et à l'époque Vector m'était apparu comme le choix idéal. ArrayList a-t-il une strucure simple de liste chaînée ou est il une succession de tableaux d'éléments ? Y a-t-il un Vector non synchronisé et non obsolète ?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Bah remplace rien, utilise des Vector[][][] tel que, en raw type donc sans générique.

    Normalement il faut pas faire ça, mais là tu nous dis que c'est ton anaconda qui le fait, donc pas trop le choix.

    Et Vector et ArrayList, en structure c'est essentiellement la même chose : un tableau encapsulé dans une implémentation de List qui stocke ses éléments dans le tableau, mémorise combien d'éléments il y a dedans, et redimensionne le tableau quand il n'est plus assez grand.

    La différence est que Vector est sychronisé ce qui fait perdre des performances pour rien, et propose tout un ensemble de méthodes pas super bien choisies, avantageusement remplacées par celles de List.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre expérimenté
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Billets dans le blog
    1
    Par défaut
    Le truc qui m'étonne est que l'on puisse déclarer un tableau de Vector typé mais qu'on ne peut pas l'instancier correctement. Cela me semble contradictoire.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Boaf non. On va pas faire chier tout le monde en le rendant 100% impossible à déclarer. Certes on peut pas initialiser le tableau correctement, mais on peut le faire à la nimp'.

    A la rigueur ça pourrait être une idée de faire un warning systématique sur les tableaux de génériques comme on en a pour les types génériques raw. Je suppose que c'est pas le cas parce qu'il y a genre une espèce d'effort de typage quand on fait ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [FORMS 6i] Tableau et vecteur
    Par kikouu dans le forum Forms
    Réponses: 4
    Dernier message: 09/04/2008, 18h55
  2. Tri Tableau Matrice vecteur
    Par french_aspi dans le forum MATLAB
    Réponses: 9
    Dernier message: 24/03/2008, 14h50
  3. Tableau de vecteur
    Par romanegr dans le forum C++
    Réponses: 6
    Dernier message: 19/12/2007, 11h30
  4. Création d'un tableau de Vecteur de String
    Par Claythest dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 29/11/2006, 17h43
  5. tableau de vecteurs
    Par foxdie dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 01/05/2006, 18h58

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