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 :

Pb de conception avec collection / objet et généricité


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2002
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 233
    Par défaut Pb de conception avec collection / objet et généricité
    Bonjour,

    Je dispose d'une hiérarchie de classe, qui sont souvent dans des collections java. Afin de faciliter leur usage, je souhaitrais ajouter des méthodes sur les collections de mes objets, j'ai donc penser a hériter une ArrayList et ajouter les méthodes qui m'intéressent.

    J'ai recréer un exemple :

    Voici les classes :
    public class Classe1
    {
    public void methode1() {}
    }
    public class Classe2 extends Classe1
    {
    public void methode2() {}
    }
    et les collections qui les gerent :
    public class List1<E> extends ArrayList<Classe1>
    {
    public void afficher1()
    {
    for ( Classe1 c : this )
    c.methode1();
    }
    }
    public class List2 extends List1<Classe2>
    {
    public void afficher2()
    {
    for ( Classe2 c : this ) //Erreur this n'est pas du type Classe2
    c.methode2();
    }
    }
    A priori je ne peux étendre la List1 pour changer son type puisque une ArrayList<Classe2> ne peut pas hériter d'une ArrayList<Classe1>. La solution serait donc de créer la classe List2 héritant de ArrayList<Classe2> mais dans ce cas je suis obliger de copier/coller les méthodes de List1 dans List2 afin de profiter de ses méthodes ! De plus je ne pourrais pas passer d'une liste a une autre list1 = list2 par ex...

    Je ne vois pas trop de solutions, si vous avez déjà été confronté a ce genre de problème ?

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut
    methode1() et methode2() sont 2 méthodes complètements différentes ? ou alors methode2() redéfini methode1() ?
    Idem pour Afficher1 et 2 ?

    Car si c'est un override, alors ta 2e liste ne sert à rien, la première suffira.

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2002
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 233
    Par défaut
    Citation Envoyé par Caalador Voir le message
    methode1() et methode2() sont 2 méthodes complètements différentes ? ou alors methode2() redéfini methode1() ?
    Idem pour Afficher1 et 2 ?

    Car si c'est un override, alors ta 2e liste ne sert à rien, la première suffira.
    Non ce sont bien des méthodes différentes, l'interet est de pouvoir disposer des méthodes methode1() et methode2() dans la liste2.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut
    Dans tous les cas, je suis d'accord avec Patriarch24. Je pense qu'étendre une List est un peu too much !
    Pourquoi ne pas faire une simple class qui aurait comme attribut la List ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public class List1{
      private List<Class1> liste;
     
      // Constructeurs
      public List1(){
        liste = new ArrayList<Class1>();
      }
     
      public List1(List<Class1> liste){
        this.liste = liste;
      }
     
      // puis tes méthodes
      add()
      remove(Class1 class1)
      getListe()
      toString()
      ... ... suivant tes besoins
    }
    Pour gérer tes class2, tu pourras utiliser des if(class1 instanceof Class2)

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2002
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 233
    Par défaut
    Oui c'est comme cela que je vais faire alors, merci a vous

  6. #6
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Afin de faciliter leur usage, je souhaitrais ajouter des méthodes sur les collections de mes objets, j'ai donc penser a hériter une ArrayList et ajouter les méthodes qui m'intéressent.
    A mon avis, ce n'est pas une bonne utilisation de l'héritage. Tu devrais plutôt faire une composition.

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

Discussions similaires

  1. Comment faire de la defensive copie avec un objet de type Collection
    Par l_informaticien dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 20/01/2013, 21h56
  2. [WD17] Collection objet avec assemblage .NET
    Par aurel247 dans le forum WinDev
    Réponses: 2
    Dernier message: 09/05/2012, 15h23
  3. Création de contrôle avec collection d'objet
    Par Acnd31 dans le forum VB.NET
    Réponses: 3
    Dernier message: 05/08/2010, 16h36
  4. [FLASH MX] Problème avec l'objet Date
    Par n_tony dans le forum Flash
    Réponses: 13
    Dernier message: 22/03/2005, 13h44
  5. Animations avec différents objet
    Par Mathieu.J dans le forum OpenGL
    Réponses: 6
    Dernier message: 09/06/2004, 14h18

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