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 :

Transformer une liste chainée en tableau


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Par défaut Transformer une liste chainée en tableau
    Bonjour à tous,


    J'aurais besoin, en java, de créer un tableau d'éléments dont le type est un générique.

    Mais... A cause du mécanisme d'effacement lors de la compilation, ce n'est pas possible.

    Pour éviter ce problème, j'ai vu que l'on peut utiliser la syntaxe : LinkedList<?>[] tableau = new LinkedList<?>[taille];

    Aucun détail n'était donné dans ce que j'ai trouvé.

    Quelqu'un connait il cet opérateur ? (est ce bien un opérateur ?)
    Comment faire, sachant que les éléments de tableau sont de type T, pour les caster en T de manière sécurisé ?


    Merci à tous pour vos réponses, qui seront précieuses !

    Tolliob

  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
    On ne peut pas. Si ce n'est pas possible ce n'est pas possible, il n'y a pas lieu de se demander comment le rendre possible.

    Cesse de vouloir un tableau de génériques. Utilise une liste de génériques ou un tableau de pas génériques, mais choisis.
    Dans certains cas imparfaits, tu pourras aussi vouloir utiliser un tableau de génériques dont l'accès n'est pas sûr.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    Pour compléter les propos de thelvin :

    Citation Envoyé par tolliob Voir le message
    Quelqu'un connait il cet opérateur ? (est ce bien un opérateur ?)
    C'est un "wildcard", qui permet de restreindre le typeage Generics.
    Ici avec <?> tu indiques au compilateur que tu travailles avec un type paramétré que tu ne connais pas précisément...

    Citation Envoyé par tolliob Voir le message
    Comment faire, sachant que les éléments de tableau sont de type T, pour les caster en T de manière sécurisé ?
    Pour avoir quelque chose de sécurisé, il ne faut pas utiliser les tableaux car ils ne sont pas type-safe.
    Un code utilisant des tableaux peut compiler sans erreur tout en provoquant des exceptions à l'exécution...


    a++

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Par défaut
    Merci à tous les deux pour vos réponses !

    Effectivement, une liste est utilisable dans mon cas.

    Tolliob

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Pour pallier ce soucis il suffit en fait passer en paramètre le type des objets contenus dans la liste. Quelque chose dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static <T> T[] toArray(Class<T> type, List<T> list) {
      return list.toArray((T[]) Array.newInstance(type, list.size()));
    }
    L’implémentation de toArray(T[]) dans LinkedList appelle également Array.newInstance (avec le cast à T[]) quand on lui passe un tableau qui n'a pas la capacité suffisante pour stocker tous les éléments.
    Si tu es sur que tous tes éléments dans ta liste sont de même type, il suffit de récupérer la classe du premier élément de la liste.
    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

  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
    En l'occurrence, le type du tableau n'est pas un paramètre générique, mais un type paramétré générique.
    Dans ce cas, un tableau empêche de vérifier la cohérence de type, et si on renonce à la cohérence de type il n'y a pas lieu de vouloir utiliser le paramètre du type paramétré.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Par défaut
    Je dois dire que certaine chose me dépassent...

    Qu'est ce qu'un paramètre générique ?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/10/2013, 13h54
  2. Transformer une liste en un tableau
    Par Okeano dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 23/04/2010, 10h43
  3. transformer une liste en chaine de caractères
    Par fboss dans le forum Général Python
    Réponses: 8
    Dernier message: 24/11/2009, 19h07
  4. Transformer une liste en tableau
    Par basket dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/09/2006, 16h01
  5. Transformer une liste en chaîne de caractères
    Par nounjours dans le forum Prolog
    Réponses: 1
    Dernier message: 23/02/2006, 15h41

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