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 :

utiliser les interfaces dans un vector


Sujet :

Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Points : 113
    Points
    113
    Par défaut utiliser les interfaces dans un vector
    Bonjour,
    j'ai plusieurs classe differentes qui doivent être affiché dans plusieurs jcombobox différentes dans une seule fenêtre, pour faire ceci ,j'ai écris une interface printable qui retourne le champs a afficher avec la methode getPrintableItem()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface Printable {
    public String getPrintableItem();
    }
    je souhaite passer un vector<Printable> a une methode qui s'occupe du chargement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void loadVectorToCombo(Vector<Printable> v,JComboBox j)
    {
        for (Printable p:v)
        {
            j.addItem(p.getPrintableItem());
        }
    }
    mais ça ne compile pas .
    Si je passe un vector<Gare> a la methode (gare implemente Printable) il me dit que la methode ne peut être appliqué a un vector<Gare>.
    Est ce que mon raisonnement est correct ?
    Merci.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 34
    Points : 43
    Points
    43
    Par défaut
    Fais voir comment tu appelles ta méthode loadVectorToCombo, je ne suis pas sûr de bien comprendre ce que tu fais...

  3. #3
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par isoman Voir le message
    Si je passe un vector<Gare> a la methode (gare implemente Printable) il me dit que la methode ne peut être appliqué a un vector<Gare>.
    Ce comportement est normal, car ce n'est pas un vrai héritage.
    En effet un Vector<Gare> n'est un exactement un Vector<Printable>, puisque ce dernier peut potentiellement contenir d'autre type d'élément.
    Par exemple tu pourrais faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v.add( new ObjectQuiImplementePrintable() );
    Ce qui serait juste du point de vue du compilateur (tu ajoutes un élément dans un vecteur de Printable), mais complètement faux puisque en réalité tu as un vecteur de Gare...


    Pour pallier à cela il faut utiliser les wildcard qui permette de limiter l'utilisation de l'objet, mais qui offre des possibilité proche de l'héritage : en utilisant Vector<? extends Printable> tu pourras utiliser la méthode avec un vecteur de n'importe quel type implémentant/étendant Printable... mais tu seras limité dans son utilisation (tu ne pourras pas faire de add() par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void loadVectorToCombo(Vector<? extends Printable> v,JComboBox j)
    {
        for (Printable p:v)
        {
            j.addItem(p.getPrintableItem());
        }
    }

    A noter également qu'il est déconseillé d'utiliser Vector (sauf en cas d'impératif lié à une API), et qu'on lui préfèrera le couple List/ArrayList (ou une autre implémentation plus spécifique selon le besoin).

    De même, l'utilisation de l'interface List<T> (voir Iterable<T> puisque tu ne fais que parcourir les éléments) te permettrais d'avoir un code encore plus générique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void loadVectorToCombo(Iterable<? extends Printable> v,JComboBox j)
    {
        for (Printable p:v)
        {
            j.addItem(p.getPrintableItem());
        }
    }
    a++

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Points : 113
    Points
    113
    Par défaut

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

Discussions similaires

  1. Réponses: 165
    Dernier message: 03/09/2009, 15h35
  2. Utiliser les MFC dans une dll
    Par simoryl dans le forum MFC
    Réponses: 4
    Dernier message: 10/09/2007, 09h16
  3. Réponses: 3
    Dernier message: 07/09/2007, 14h14
  4. Utiliser les threads dans application Struts
    Par rach375 dans le forum Struts 1
    Réponses: 7
    Dernier message: 18/09/2006, 11h32

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