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 :

Cast d'une ArrayList en ArrayList mère


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de schneidb
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 236
    Par défaut Cast d'une ArrayList en ArrayList mère
    Salut,

    j'ai cherché sans succès sur le forum.
    Mon problème est plutot simple.

    J'ai une classe abstraite Error, ensuite j'ai des classes filles qui "l'extends": VariableNotFoundError, ...

    J'ai fait une méthode qui traite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getErrorLinesJavascript(ArrayList<Error> errors)
    Or quand je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getErrorLinesJavascript(vnfErrors);
    il me dit:
    The method getErrorLinesJavascript(ArrayList<Error>) in the type ErrorLog is not applicable for the arguments (ArrayList<VariableNotFoundError>)
    Et quand j'essaye de faire un cast, il me fait une erreur de compilation:
    .getErrorLinesJavascript((ArrayList<Error>)vnfErrors);

    Cannot cast from ArrayList<VariableNotFoundError> to ArrayList<Error>
    Je ne vois pas l'erreur, je débloque ?
    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Bonjour, tu devrais déclarer ta variable vnfErrors en tant que ArrayList<Error>.

  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,


    Déjà je trouve qu'utiliser ArrayList comme type de paramètre est incorrect. Plutôt que d'utiliser un type concret il serait préférable d'utiliser une abstraction comme List ou Collection qui laisse plus de possibilité...


    L'erreur est normal puisqu'une List<Error> n'est pas une List<VariableNotFoundError>. Pour montrer les problèmes que cela pourrait poser imagine le simple code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void method(List<Error> errors) {
        error.add(new MaClasseQuiEtendError());
    }
    Ce code est tout à fait correct et compile correctement, mais si tu pouvais appeler cette méthode avec une List<VariableNotFoundError> tu te retrouverais avec une incohérence car tu ajouterais un type incorrect dans la liste. De ce fait les Generics n'utilisent pas l'héritage de la même manière...


    En fait il faut utiliser les wildcards pour étendre les possibilités grace à des restriction, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void method(List<? extends Error> errors) {
    Ici la méthode peut être utilisée avec n'importe quelles listes paramétrés avec le type Error ou un type fils. En contrepartie toutes les méthodes comme add(T) prenant le type Generics en paramètre ne pourront pas être utilisées car on ne le connait pas avec précision. A l'inverse toutes les méthodes retournant T pourront être utilisées en utilisant le type Error (qui de toute manière est le type parent).


    A l'inverse (mais moins courant), on peut également utiliser la notation suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void method(List<? super Error> errors) {
    Ici la méthode peut être utilisée avec une liste d'Errors ou de n'importe quel type parent. De ce fait les méthodes comme add(T) pourront être utilisé avec un objet de type Error car de toutes manière il s'agit d'un type fils. Tandis que les méthodes retourant T ne seront plus utilisable en l'état (on ignore le type de retour exact).


    a++

  4. #4
    Membre expérimenté Avatar de schneidb
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 236
    Par défaut
    super merci pour votre réponse, si rapide en plus

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

Discussions similaires

  1. Problème d'ArrayList d'arrayList d'arrayList
    Par Shaina dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 25/02/2011, 11h04
  2. [JAXB] Desérializer du xml vers une liste ou arraylist
    Par jamelledine_med dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 31/05/2009, 20h17
  3. Réponses: 14
    Dernier message: 30/07/2007, 16h46
  4. Serialization d'une classe avec arraylist
    Par jpsegret dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 01/04/2007, 09h46
  5. Réponses: 7
    Dernier message: 30/06/2005, 10h06

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