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 :

Problème de compilation avec Collection<? extends MonObject>


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Par défaut Problème de compilation avec Collection<? extends MonObject>
    Bonjour à tous,

    Le bout de code suivant me pose problème et empêche mon programme de compiler.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    Collection<? extends MyObject> result = myMethod();
    Collection<? extends MyObject> myCollection = new ArrayList< MyObject>();
    myCollection.addAll(result);
    l'erreur se produit au niveau de la 3ème ligne (l'appel du addAll) et j'obtiens le message suivant:
    "the method addAll(Collection<?extends capture#6-of ? extends MyObject>) in the type Collection<capture#6-of ? extends MyObject> is not applicable for the argument Collection<capture#7-of ? extends MyObject>"


    Pourriez-vous m'expliquer comment le corriger svp?

    Merci beaucoup

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Votre code est interprété par le compilateur comme


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Collection<X extends MyObject> result = myMethod();
    Collection<Y extends MyObject> myCollection = new ArrayList< MyObject>();
    myCollection.addAll(result);
    et pour le compilateur, on ne peux pas faire rentrer des X dans des Y

    Vous pouvez cependant simplement corriger comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Collection<? extends MyObject> result = myMethod();
    Collection<MyObject> myCollection = new ArrayList<MyObject>();
    myCollection.addAll(result);

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Par défaut
    Merci pour cette explication: je comprends mieux comment les compilateur interprète les "? extends Machin".

    Cependant mon problème est beaucoup plus compliqué que cela. En fait myCollection est un paramètre d'entrée à ma méthode, je ne contrôle pas le type de ce paramètre.
    Le code est plutôt comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void methodTreatment(Collection<? extends MyObject> myCollection ){
    ...
    ...
    Collection<? extends MyObject> result = myMethod();
    myCollection.addAll(result);
    ...
    ...
     
    }
    Y a-t-il un moyen de contourner cette erreur de compilation?

    merci beaucoup

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Donc en gros vous aevz une méthode, qui recois une collection d'un Type X, une méthode qui retourne une collection d'un type Y pas nécessairement compatible. Ce n'est pas possible à moins de revoir votre design correctement.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class MaClasse<T extends MyObject> {
     
    public void methodTreatment(Collection<T> myCollection ){
    ...
    ...
    Collection<T> result = myMethod();
    myCollection.addAll(result);
    ...
    ...
     
    }
    public Collection<T> myMethod() {....}

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Par défaut
    Pas le choix, je revois ma conception.
    Merci beaucoup

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

Discussions similaires

  1. Problème de compilation avec Borland : Direct Draw
    Par Burckel dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 26/09/2005, 18h17
  2. Problème de compilation avec Direct Input
    Par di-giac dans le forum DirectX
    Réponses: 6
    Dernier message: 06/05/2005, 18h19
  3. [MFC] Problème de compilation avec afxctl.h
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 15/06/2004, 13h51
  4. Problème de compilation avec Dev-C++
    Par Rouliann dans le forum Dev-C++
    Réponses: 14
    Dernier message: 14/06/2004, 18h44
  5. Réponses: 1
    Dernier message: 29/10/2003, 12h16

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