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 :

Erreur "java.lang.ClassCastException"


Sujet :

Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 27
    Points : 16
    Points
    16
    Par défaut Erreur "java.lang.ClassCastException"
    Bonjour,

    j'ai un problème de cast et je ne sais pas comment le résoudre, le problème se déclenche quand j'essai d'instancier un objet, voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class MaxPriorityQueue<Key extends Comparable<Key>>{
     
        private Key[] list;
        private int nbrItems = 0;
     
     
        public MaxPriorityQueue(){
            list =  (Key[]) new Object[2]; 
        }
    }
    la ligne d'instanciation d'un objet de cette classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaxPriorityQueue<String> mPQ = new MaxPriorityQueue<String>();
    Le problème se situe ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list =  (Key[]) new Object[2];
    Et voici l'erreur que j'obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
        at MaxPriorityQueue.<init>(MaxPriorityQueue.java:12)
        at launcher.main(launcher.java:14)
    Merci d'avance

  2. #2
    Membre confirmé
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Points : 646
    Points
    646
    Par défaut
    Bonjour

    En remplaçant avec un ArrayList ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class MaxPriorityQueue<Key extends Comparable<Key>>{
     
    	    private ArrayList<Key> list;
    	    private int nbrItems = 0;
     
     
    	    public MaxPriorityQueue(){
    	        list = (ArrayList<Key>) new ArrayList<Object>();
    	    }
     
    	}
    voici le code dans le cas où ça te conviendrais

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Je suis d'accord, sauf que l'utilisation des lists de l'API JAVA est interdite
    J'ai résolu le bug en remplaçant la ligne

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    this.list =  (Key[]) new Object[1];

    par :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    this.list =  (Key[]) new Comparable[1];

    Merci pour l'aide

  4. #4
    Membre habitué
    Profil pro
    Opération
    Inscrit en
    Décembre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opération

    Informations forums :
    Inscription : Décembre 2012
    Messages : 91
    Points : 188
    Points
    188
    Par défaut
    Pourquoi ne pas simplement faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class MaxPriorityQueue<Key extends Comparable<Key>>{
     
        private Key[] list;
        private int nbrItems = 0;
     
     
        public MaxPriorityQueue(){
            list =  new Key[2]; 
        }
    }
    ?

  5. #5
    Membre confirmé
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Points : 646
    Points
    646
    Par défaut
    Citation Envoyé par stitox Voir le message
    Je suis d'accord, sauf que l'utilisation des lists de l'API JAVA est interdite
    J'ai résolu le bug en remplaçant la ligne

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    this.list =  (Key[]) new Object[1];

    par :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    this.list =  (Key[]) new Comparable[1];

    Merci pour l'aide
    Ah ok!!
    Bonne continuation

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par jdevbe Voir le message
    Pourquoi ne pas simplement faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class MaxPriorityQueue<Key extends Comparable<Key>>{
     
        private Key[] list;
        private int nbrItems = 0;
     
     
        public MaxPriorityQueue(){
            list =  new Key[2]; 
        }
    }
    ?
    En faite, comme Key est un type générique ici, pour des raisons que j'ignore Java n'offre pas cette possibilité.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Laine Voir le message
    Ah ok!!
    Bonne continuation
    Merci, bonne continuation à toi aussi.

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 619
    Points
    21 619
    Par défaut
    Citation Envoyé par stitox Voir le message
    En faite, comme Key est un type générique ici, pour des raisons que j'ignore Java n'offre pas cette possibilité.
    Plus exactement c'est un type paramètre, connu uniquement à la compilation.
    Comme un tableau est créé à l'exécution avec connaissance du type concret des éléments qu'il peut contenir, l'expression new Key[2] ne veut rien dire.
    En gros Java remarque "mais, c'est un type paramètre ton truc. Quand, à l'exécution, je vais devoir créer le tableau, il faut que je crée un tableau de quoi ? C'est ça que j'ai besoin de savoir !"

Discussions similaires

  1. GXT Grid+erreur java.lang.ClassCastException
    Par cyranno dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 03/11/2010, 06h53
  2. [WebService Java] Erreur : java.lang.ClassCastException
    Par alpha25 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 13/03/2008, 14h40
  3. erreur java java.lang.ClassCastException
    Par yLaplace dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2007, 18h17
  4. Réponses: 16
    Dernier message: 10/01/2006, 22h02

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