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 :

Collections et héritage


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kodo
    Profil pro
    Chef de projet technique
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet technique

    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Par défaut Collections et héritage
    Bonjour, j'ai une question sur les collections et l'héritage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class A {
    }
    public class B extends A{
    }
    et j'ai la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class ADao{
    public HahsMap<String,A> getAs(List<String> lst){
    HashMap<String, A> mapA = new HashMap<String, A>();
    		List<A> lstA = listA(lst);
    		for(A s: lstA){
    			mapA.put(StringUtils.trim(s.getNom()), s);
    		}
    		return mapA;
    }
    }
    dans une partie de code, j'essaie d'appeler la méthode getAs pour qu'elle me retourne HahsMap<String,B> mais j'ai des erreurs de compilation, j'ai changé la signature en mettant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public HahsMap<String, ? extends A> getAs(List<String> lst){
    }
    Mais toujours le même problème.
    Qu'est ce que vous pouvez me proposer pour réussir la compilation ?
    Merci de votre aide.

  2. #2
    Membre éclairé Avatar de kodo
    Profil pro
    Chef de projet technique
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet technique

    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Par défaut
    je viens de revoir la doc Java, en fait pour une collection COL<Type> il n'est autorisé d'ajouter que des objets de type Type, donc c'est normal avoir des erreurs de compilation. pourquoi je sais pas

  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
    Citation Envoyé par kodo Voir le message
    je viens de revoir la doc Java, en fait pour une collection COL<Type> il n'est autorisé d'ajouter que des objets de type Type, donc c'est normal avoir des erreurs de compilation. pourquoi je sais pas
    Non dans une Collection<Type>, il est possible d'ajouter tous les éléments de type "Type", ce qui inclut les types enfants (mais pas les types parents).

    Toi tu voudrais faire l'inverse : mettre des objets de type A dans une liste de B, alors que A est un parent de B... Ce n'est pas logique.


    a++

  4. #4
    Membre éclairé Avatar de kodo
    Profil pro
    Chef de projet technique
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet technique

    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Par défaut
    Merci adiGuba pour la réponse,
    t as raison,
    en fait j'ai mal présenté mon problème,
    voila :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class A{
    	public void mthod(HashMap<String, A> a){
     
    	}
    }
     
    class B extends A{
     
    }
    si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    HashMap<String, B> aa = new HashMap<String, B>();
            B b = new B();
            b.mthod(aa);
    ça me retourne une erreur de compilation.l'héritage ne marche pas dans ce cas.

    Merci.

  5. #5
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    C'est tout à fait normal que ça ne marche pas. Ta méthode héritée veut tout naturellement recevoir une map<String,A>, ce qui est différent d'une map<String,B>. L'héritage ne modifie en rien le typage des méthodes !

  6. #6
    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
    C'est normal que tu ne puisses pas affecter une Map<String, B> dans une Map<String, A>, car sinon tu pourrais "casser" le typeage.

    Imagines que ta méthode soit défini comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public void method(HashMap<String, A> a){
    			a.put("clef", new A());
    	}
    En lui passant une Map<String,B> tu ajouterais un élément A dans une Map censée contenir des objets de type B...


    Pour pallier à cela il faut passer par les wildcards qui te permettent d'utiliser partiellement la Map : Map<String, ? extends A> ou Map<String, ? super A>, selon ce que tu veux faire dans ta méthode...


    a++

Discussions similaires

  1. Collection d'objet et héritage
    Par TSnarfK dans le forum Langage
    Réponses: 3
    Dernier message: 29/03/2010, 17h23
  2. Relation inverse vers une collection avec héritage
    Par Julienoune dans le forum Hibernate
    Réponses: 0
    Dernier message: 18/03/2009, 06h09
  3. Collections et héritage de fiche
    Par Aka Guymelef dans le forum Composants VCL
    Réponses: 3
    Dernier message: 26/11/2008, 16h51
  4. Collection et héritage
    Par BigNic dans le forum C#
    Réponses: 7
    Dernier message: 25/01/2008, 16h17
  5. Héritage et Iterateur de Collection
    Par onur dans le forum C++
    Réponses: 6
    Dernier message: 12/04/2006, 00h05

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