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 conception classe générique


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 327
    Par défaut Problème conception classe générique
    Bonsoir,

    Voila j'essaie désespérément de trouver un moyen de concevoir une classe générique de sorte que je veux forcé les deux paramètre à être du même type, je m'explique avec un exemple.

    Admettons que j'ai plusieurs espèces d'animaux (vache, taureau, lion, lionne, ...) je voudrais faire une classe générique avec comme contrainte de forcé la paire d'animaux de la même espèce c'est à dire le lion avec la lionne puis le taureau avec la vache et qu'il ne soit pas possible de mettre un lion avec une vache par contre un lion peut aussi allé avec un lion et une vache avec une vache.

    J'espère avoir été assé clair avec mon exemple. Merci d'avance

  2. #2
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    je n'ai pas tout à fait compris ... tu peux faire simple ou tu peux faire compliqué.
    Si c'est vraiment l'emploi des types paramétrés (generics) que tu cherches voici une solution compliquée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    abstract class AnimalSage<A extends AnimalSage> {
          public void pacseLes(A lUn, A lAutre) {
             .....
          }
    }
     
    class Bovin extends AnimalSage<Bovin> {
    }
    et maintenant essaye de marier la carpe et le lapin!
    C'est quand même hyper-technique et pas pour les apprentis sorcier

  3. #3
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    petits commentaires supplémentaires...

    ça serait mieux comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class AnimalSage<A extends AnimalSage> {
        public void sePacseAvec(A lAutre) {
      }
    }
    et bien entendu il faut créer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Taureau extends Bovin {
    }
    class Vache extends Bovin {
    }
    pour pouvoir les apparier ...
    remarque: on peut apparier un taureau avec un taureau .... (mais c'était dans les specs initiales non?)

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 327
    Par défaut
    Je n'ai pas vraiment compris ce que vous m'avez montré puisque déjà pour un couple il faut être deux et donc faire une chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class Test<A, B>{}
    Et donc si je comprend bien la généricité il faudrait que pour contraindre mes paramètres A et B à être tout deux de la même catégorie sans ce préocupé du type des paramètres que je donnerais à cette classe il faudrait écrire une chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class Test<A extends kelkeChose, B extends kelkeChose>{}
    Et c'est ce "kelkeChose" que je ne sais pas par quoi le remplacer. Le truc est que je ne vois pas ce que vous essayé de me montrer. Désolé si cela vous paraît bête de ma part.

  5. #5
    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,


    Pourquoi définir deux types paramétré alors que tu n'en veux qu'un ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Test<T>{
     
        public T getA();
     
        public T getB();
     
    }
    a++

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 327
    Par défaut
    Tout simplement parce que je veux créer un couple et que pour faire un couple on a besoin de deux entitées. Et aussi pour manipuler les deux entités que je donnerais à ma classe par exemple dans le main je ferais un truc du genre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Vache v = new Vache ();
    Taureau t = new Taureau ();
    Lion l = new Lion ();
    Lionne ll = new Lionne ();
    Couple<Taureau, Vache> cp = new Couple<Taureau, Vache> (); // pour préciser que je veux un taureau et une vache
    Couple<Taureau, Taureau> cp = new Couple<Taureau, Taureau> (); // possible car je ne veux pas me préocupé du sexe
    Couple<Taureau, Lion> cp = new Couple<Taureau, Lion> (); // que le compilo me dise que cela n'est pas possible
    J'espère avoir été mieux compris

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

Discussions similaires

  1. Problème de (classe générique)
    Par HASSNAA66 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 15/10/2012, 12h27
  2. problème avec une classe générique
    Par bard123 dans le forum Langage
    Réponses: 4
    Dernier message: 27/06/2008, 11h09
  3. Probléme de Classe utilisant un collection générique.
    Par hawax dans le forum Windows Forms
    Réponses: 8
    Dernier message: 01/05/2008, 15h25
  4. Réponses: 19
    Dernier message: 05/01/2008, 16h06
  5. Problème avec une classe générique
    Par Core8 dans le forum C++
    Réponses: 3
    Dernier message: 19/03/2007, 03h18

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