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

Langage Java Discussion :

Conversions, collections et généricité


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 10
    Points
    10
    Par défaut Conversions, collections et généricité
    Bonjour à tous,

    je travaille sur un projet en Java et je coince vraiment sur une conversion qui ne se fait pas. J'ai une runtime error : java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

    Jusque là pas de soucis, les erreurs ça arrive !

    Le problème c'est que j'ai un code qui marche mais ne fait pas ce que je veux et un code qui marche devrait faire ce dont j'ai besoin mais qui plante ...

    Code qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //création
    @SuppressWarnings("unchecked") List<MonTypeEnum>[][] init = (List<MonTypeEnum>[][]) new List<?>[lines][rows];
     
    //initialisation
    // je ne vous l'affiche pas parce qu'on s'en moque
     
    final DefaultGridModel<MonTypeEnum> model = new DefaultGridModel<MonTypeEnum>(init);
    DefaultGridModel est une classe d'une library imposée dont le constructeur est :

    DefaultGridModel(Collection<? extends E>[][] init)
    Construct of GridModel, given its dimension and the initial content of each cells

    Ce code fonctionne donc très bien. Malheureusement il utilise un type Enum ce qui ne me convient finalement pas car je veux pouvoir ajouter des valueurs au cours du jeu (pas possible avec un enum).

    J'ai donc fait ce code là,
    Code qui ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //création
    @SuppressWarnings("unchecked") List<MonType>[][] init = (List<MonType>[][]) new List<?>[lines][rows];
     
    //initialisation
    // ...
     
    final DefaultGridModel<MonType> model = new DefaultGridModel<MonType>(init);
    Ce qui est exactement la même chose, je change juste le type. Mais là rien ne vas plus :
    java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LMonType;

    A la ligne :
    @SuppressWarnings("unchecked") List<MonType>[][] init = (List<MonType>[][]) new List<?>[lines][rows];

    Est-ce que quelqu'un pourrait m'aider ?

    Il me faut une matrice de MonType que je puisse passer en argument au constructeur de
    DefaultGridModel donc de type Collection<? extends E>[][]

    Merci d'avance pour votre aide !

    Whims

  2. #2
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    En testant juste ces lignes de code (avec des choses vides), ça passe.

    Ça semble d'ailleurs étonnant que ton erreur vienne de la ligne d'instanciation du double array de Listes.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Mince c'est vrai. J'ai fait le test avec des classes vides et ça fonctionne sans erreurs.

    Je pensais que le problème venait de Collection, enfin... qu'il venait de moi qui utilisait mal Collection.

    J'ai pensé aussi que je ne faisais pas l'initialisation (je l'avais laissée en commentaire) et que le problème était peut être dû à ça mais non, ça ne marche pas mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LMonType;
    Exception in thread "main" java.lang.NullPointerException
        at Play2.main(Play2.java:104)
    La ligne 104 correspondant bien à celle que j'ai indiquée.

    Je en comprends pas à quoi c'est dû

    j'ai essayé avec mes classe vide en utilisant le vrai DefaultGridModel mais ça fonctionne aussi.

    Est-ce que le problème pourrait venir de MonType ? Je n'ai pas de constructeur vide MonType(), est-ce que ça pourrait poser un problème ?

    Je me sens vraiment démunie face à cette erreur (erreur non reproductible ! saletée )

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Au temps pour moi.
    Le problème ne vient pas de là.

    j'avais en fait des appels de méthodes à la place de lines et rows pour définir la taille de ma matrice.

    Je pars en effet d'une liste de liste de MonType que j'initialise à la lecture d'un fichier., une fois connaissant la taille je peut créer mon tableau de tableau.

    j'ai donc séparé tous ces appels :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @SuppressWarnings("unchecked") List<MonTypeEnum>[][] init = (List<MonTypeEnum>[][]) new List<?>[listeDeListe.size()][listeDeListe.get(0).size()];
    devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int lines = listeDeListe.size();
    int rows = listeDeListe.get(0).size();
    @SuppressWarnings("unchecked") List<MonTypeEnum>[][] init = (List<MonTypeEnum>[][]) new List<?>[lines][rows];
    Et l'erreur reste à la ligne 104 qui correspond maintenant à : int lines = listeDeListe.size();

    J'ai fait un affichage de listeDeListe qui en effet est null.

    Je vais donc rediriger mes recherches de ce côté-ci. Merci en tout cas d'avoir pris du temps pour mon problème et de m'avoir permis de trouver que ce n'en était pas un !

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

Discussions similaires

  1. SAP PP/ Conversion collective des OP CO41
    Par sputnik dans le forum SAP
    Réponses: 0
    Dernier message: 24/07/2009, 13h27
  2. Réponses: 8
    Dernier message: 29/08/2007, 10h54
  3. Conversion String Collection en List <String>
    Par Seth77 dans le forum Framework .NET
    Réponses: 2
    Dernier message: 21/11/2006, 09h57
  4. [ Conversion ] VO vers Collection
    Par jeoff dans le forum Langage
    Réponses: 12
    Dernier message: 23/09/2006, 14h18
  5. [Collections] Conversion de Vector en tableau de String
    Par java_math dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 06/06/2004, 12h55

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