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 :

Comment utiliser la généricité en java ?


Sujet :

Langage Java

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 52
    Points
    52
    Par défaut Comment utiliser la généricité en java ?
    Bonjour à toutes et à tous,

    J'apprends le java et j'aimerais créer une classe générique. Pour le besoin de l'exercice j'utilise une classe Trousse qui contient des fournitures contenues dans un Vector. Je souhaite que le Vector puisse accepter différents types de fournitures (Crayon, Gomme, Stylo).

    Voici un exemple de la déclaration d'une classe générique issu du net mais qui ne fonctionne pas, pouvez-vous m'aider ?
    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
     
    public class Famille
    {
        private linkedList < MaClasse > liste;
     
        public setMembre(MaClasse m)
        {
            liste.add(m);
        }
     
        public MaClasse getMembre(int i)
        {
            return liste.get(i);  }
        }
    }
    J'ai parcouru le forum et j'ai trouvé un exemple avec le mot class, j'ai donc modifié mon code pour obtenir le résultat suivant :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    package fournitures;
    
    import java.util.Vector;
    
    public class Trousse {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		Trousse maTrousse = new Trousse();
    		
    		Crayon crayonBleu = new Crayon(8, 10);
    		Gomme gommeBlanche = new Gomme();
    		
    		maTrousse.addItem(crayonBleu);
    		maTrousse.addItem(gommeBlanche);
    	}
    	
    	public Trousse() {
    		mesFournitures = new Vector<Class>();
    	}
    	
    	public void addItem(Class fourniture) {
    		mesFournitures.addElement(fourniture);
    	}
    	
    	private Vector<Class> mesFournitures;
    }
    En rouge les lignes d'erreurs :
    - The method addItem(class) in the type Trousse is not applicable for the arguments (Crayon);
    - The method addItem(class) in the type Trousse is not applicable for the arguments (Gomme);

    Visiblement ma classe n'est pas générique pouvez-vous m'aider ?

  2. #2
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Class et un type d'objet qui n'a rien a voir avec tes fourniture, il représente une classe java au sens de l'objet la représentant et non pas au sens de l'instance de cette classe.


    Dans ton cas ce serait plutot ce code qu'il faut:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    package fournitures;
     
    import java.util.Vector;
     
    public class Trousse {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		Trousse maTrousse = new Trousse();
     
    		Crayon crayonBleu = new Crayon(8, 10);
    		Gomme gommeBlanche = new Gomme();
     
    		maTrousse.addItem(crayonBleu);
    		maTrousse.addItem(gommeBlanche);
    	}
     
    	public Trousse() {
    		mesFournitures = new Vector<Fourniture>();
    	}
     
    	public void addItem(Fourniture fourniture) {
    		mesFournitures.addElement(fourniture);
    	}
     
    	private Vector<Fourniture> mesFournitures;
    }

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 52
    Points
    52
    Par défaut
    Bon je crois que je me suis emmêlé les pinceaux !

    Je reformule ma question :
    - Je souhaite créer une classe Trousse qui puisse contenir des Objets différents simultanément.
    - C'est-à-dire qu'une Trousse se compose d'un conteneur qui stockera des objets différents.

    J'ai compris que ce que je souhaite faire n'est pas de la généricité. La généricité est, pour ce que j'en ai compris, un moyen de créer des méthodes qui travaillent sur des Objets dont le type est définit à l'exécution.

  4. #4
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    l'exemple donné supposait que Gomme, Crayon etc partageient une hierarchie commune (fourniture). Sans ça, c'est simplement un conteneur de Object, car je ne vois pas quel autre critère vous utiliseriez....

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

Discussions similaires

  1. comment utiliser un buffer dans java
    Par javadz dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 24/02/2014, 19h54
  2. comment utiliser une dll en JAVA
    Par Tanebisse dans le forum API standards et tierces
    Réponses: 19
    Dernier message: 31/07/2008, 14h33
  3. comment utiliser la JXTable dans Java 6
    Par bassim dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 19/01/2007, 19h55
  4. [Couche réseau]Comment utiliser du CRC en Java?
    Par Yanos dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2006, 16h23
  5. comment utiliser de l'OpenGL avec du Java ?
    Par DjiZ dans le forum OpenGL
    Réponses: 3
    Dernier message: 14/01/2004, 15h21

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