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 :

ClassCastException: [Ljava.lang.Object et Liste


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Points : 9
    Points
    9
    Par défaut ClassCastException: [Ljava.lang.Object et Liste
    Bonsoir,

    J´ai ume methode qui effectue une requete et renvoie un resultat de type List
    . Dans ce cas avec la valeur 55, je dois avoir 3 objects qui ont plusieurs parametres (id, nom, titre, identification, etc...)
    Mais au niveau de System.out.println(list.get(i).getIdentifier()); , j´ai le message d´erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
    avec
    list.get(i).getIdentifier() je voudrai acceder au champs identification de chaque resultat .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       int i=0;
    		List<Content> list = getmonDAO().getById("55"));
    		Iterator it = list.iterator();
     
    		 while(it.hasNext()){
     
    			 System.out.println(list.get(i).getIdentifier());			 
    			 i++;			 
    		 }
    Comment ca se passe?
    Merci

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 279
    Points
    279
    Par défaut
    Salut,
    Je suppose que ta méthode getIdentifier() affiche à l'écran (avec des System.out.println() par exemple) les champs que tu souhaites voir (id, nom, titre...).
    On te retourne une exception du type ClassCastException, je suppose donc que tu as un problème de cast.
    De quel type sont tes objets de la liste ??
    Imaginons qu'ils sont du type Personne, essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (Personne) list.get(i).getIdentifier(); // tu cast ici.
    Et je pense que tu devrais peut être faire le ou les System.out.println() dans ta fonction getIdentifier() au lieu de le faire comme ça.

    Voilà, j'espère t'avoir aidé. A+

  3. #3
    Membre confirmé Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Points : 452
    Points
    452
    Par défaut
    Visiblement tu es en java 1.5 et ta liste "list" contient des objets Content ?

    Donc pour parcourir cette liste tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (Content content : list) {
      System.out.println(content.getIdentifier());
    }
    Là tu as mélangé l'utilisation d'iterator et d'une bonne vieille boucle avec incrémentation de i.

    Après peut-être que ta méthode getmonDAO().getById() ne te retourne pas une liste contenant des objets Content...

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Mes objetcs sont de type Content, et getIdentifier renvoie un element de type String.
    J´ai testé la solution de womannosky et il me dit qu´il peut pas caster un String en content.
    Pour supermanu il me renvoit le meme message d´erreur.
    A bientot

  5. #5
    Membre confirmé Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Points : 452
    Points
    452
    Par défaut
    Et tu n'as pas un peu plus de détails sur l'exception ?

    Tu peux nous montrer le code de getmonDAO().getById(...) ?

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 279
    Points
    279
    Par défaut
    Et ça marche pas ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println((Content) list.get(i).getIdentifier());

  7. #7
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    quand j´ajoute System.out.println(it.next()); dans la boucle il me renvoie ceci:
    [Ljava.lang.Object;@688954 comme reponse, effectivement il a bel et bien un resultat.

    Pour le code de mon getById c´est ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public Content getById(String id) {
    		return (Content) super.getById(id, Content.class);
    	}
    et le super.getById provient de ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      protected Object getById(Serializable id, Class theClass) {         
            return getById(id, theClass, false);
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Avec  System.out.println((Content) list.get(i).getIdentifier()); il me donne
    Erreur :Cannot cast from String to Content
    A bientot

  8. #8
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    getIdentifier() est methode de la classe content et doit me retourner un string. Content getById(String id) est dans ma classe service et doit me retourner un(ou une serie de Content) Content à partir du id.

  9. #9
    Membre confirmé Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Points : 452
    Points
    452
    Par défaut
    Et si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.out.println(((Content) list.get(i)).getIdentifier());
    Sachant que je ne comprends vraiment pas pourquoi ça ne marche pas avec la méthode que je t'ai donné.

    Je viens de tester un exemple avec succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    List<Hotel> hotels = finder.trouveHotelsParVille("Londres");
    for(Hotel h : hotels) {
      System.out.println(h.getVille());
    }
    Mystère...

  10. #10
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    moi meme j´y pige plus que dalle.
    je viens de faire : System.out.println(content.getId()); et aussi System.out.println(((Content) list.get(1)).getIdentifier()); et j´ai comme erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
    	at com.test.MyLibraryTestUser.main(MyTest.java:29)
    J´y pige plus rien

  11. #11
    Membre confirmé Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Points : 452
    Points
    452
    Par défaut
    Oui c'est très étrange !
    tu vas créer un bouchon !!!

    au lieu de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Content> list = getmonDAO().getById("55"));
    tu vas construire toi même ta liste et la parcourir. c'est juste pour tester que le parcours fonctionne correctement.

    Donc tu peux faire ainsi (après avoir commenté la ligne ci-dessus) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //creation dune liste bouchon
    List<Content> list = new ArrayList<Content>();
    list.add(new Content(...);
    list.add(new Content(...);
    list.add(new Content(...);
    
    //parcours de la liste
    for (Content content : list) {
      System.out.println(content.getIdentifier());
    }
    et tu regardes si ça marche

  12. #12
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Ok j´ai fait comme tu as dit supermanu, il me renvoie null pour chacune des entrées...
    C´est bizzare..

  13. #13
    Membre confirmé Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Points : 452
    Points
    452
    Par défaut
    Non non c'est normal, enfin je pense.
    Tu as dû utiliser le constructeur par défaut : new Content(). Sans passer de paramètre, donc tous les champs sont null.

    Si tu as un constructeur avec des paramètres, du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public Content(int id, String nom, String titre) {
    ...
    }
    utilise le quand tu initialise la liste. comme ça tu auras des champs rempli qui ne renverront pas null.

    Mais l'important c'est que tu n'as pas d'exception. Donc la boucle for marche sans problème. Le problème viendrait donc de ta méthode qui récupère la liste de Content.

    Si tu travailles avec Eclipse, tu peux débugguer ton code et mettre un point d'arrêt juste après la récupération de la liste. Comme ça tu verras vraiment ce que contient ta liste...

  14. #14
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Dans ma classe Abstraite, j´a entre autre ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    private String identifier;
     
     
    	public Content(String identifier) {
    		 this.identifier = identifier;
        }	
     
    public String getIdentifier() {
            return this.identifier;
        }
     
        public void setIdentifier(String identifier) {
            this.identifier = identifier;
        }
     
    j´ai plusieurs constructeurs......


    et dans ma classe non abstraite j´avais juste ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public Content() {
     
        }
    j´ai recopié le meme contenu de la classe abstraite et ca me donne les chiffres rentrés...

    Bon ca ne change rien au probleme puisque l´erreur persiste avec ma methode en question

  15. #15
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    quand je vais dans le debuggeur il contient dans la variable elementData les données dont j´ai besoin en clair. Mais je comprends toujours pas ou est ce que ca coince....

Discussions similaires

  1. Ljava.lang.Object; incompatible with ma.eai.batch.ovo.util.Compte
    Par samiamiya dans le forum Général Java
    Réponses: 2
    Dernier message: 20/07/2012, 11h49
  2. java.lang.Object javax.media.Buffer.getData()
    Par keil dans le forum Multimédia
    Réponses: 3
    Dernier message: 28/07/2011, 13h41
  3. Réponses: 1
    Dernier message: 02/10/2009, 16h49
  4. [java.lang] Object/String --> compareTo() ou equals()
    Par wdionysos dans le forum Langage
    Réponses: 17
    Dernier message: 17/01/2006, 23h41
  5. [Débutant] java.lang.object
    Par bonnefr dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 27/05/2004, 14h54

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