Bsr à tous,
J'ai une question sur les classes génériques qui d'après ce que j'ai lu sur un support de cours :
"Lorsque vous utilisez un type générique, vous le paramétrez avec un type de données. Ceci permet au code de s’adapter automatiquement et de réaliser la même action indépendamment du type de données."
Voici la classe générique en question :
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
 
package Cours;
 
import java.util.ArrayList; 
public class ListeGenerique <T> 
{ 
    // pour stocker les éléments de la liste 
    private ArrayList<T> liste; 
    // pointeur de position dans la liste 
    private int position; 
    // nombre d’éléments de la liste 
    private int nbElements; 
    // constructeur avec un paramètre permettant de dimensionner 
    // la liste 
    public ListeGenerique(int taille) 
    { 
     liste=new ArrayList<T>(taille); 
    } 
    public void ajout(T element) 
    { 
            liste.add(element); 
            nbElements = nbElements + 1; 
    } 
   public void insert(T element,int index) 
    { 
        // on vérifie si l’index n’est pas supérieur au nombre 
        // d’éléments ou si l’index n’est pas inférieur à 0 
        if (index >= nbElements || index < 0) 
        { 
           return; 
        } 
        liste.add(index,element); 
        // on met à jour le nombre d’éléments 
        nbElements = nbElements + 1; 
    } 
   public void remplace(T element,int index) 
   { 
       // on vérifie si l’index n’est pas supérieur au nombre 
       // d’éléments ou si l’index n’est pas inférieur à 0 
       if (index >= nbElements || index < 0) 
       { 
          return; 
       } 
       liste.set(index,element); 
   } 
   public void supprime(int index) 
   { 
       int i; 
       // on vérifie si l’index n’est pas supérieur au nombre 
       // d’éléments ou si l’index n’est pas inférieur à 0 
       if (index >= nbElements || index < 0) 
       { 
          return; 
       } 
       liste.remove(index); 
       // on met à jour le nombre d’éléments 
       nbElements = nbElements - 1; 
   } 
   public T getElement(int j)  
   { 
      return liste.get(j); 
   } 
   public int getNbElements() 
   { 
       return nbElements; 
   } 
   public T premier() throws Exception 
   { 
       if (nbElements == 0) 
       { 
           throw new Exception("liste vide"); 
       } 
       // on déplace le pointeur sur le premier élément 
       position = 0; 
       return liste.get(0); 
   } 
   public T dernier() throws Exception 
   { 
       if (nbElements == 0) 
       { 
           throw new Exception("liste vide"); 
       } 
       // on déplace le pointeur sur le dernier élément 
       position = nbElements - 1; 
       return liste.get(position); 
   } 
   public T suivant() throws Exception 
   { 
       if (nbElements == 0) 
       { 
           throw new Exception("liste vide"); 
       } 
       // on vérifie si on n’est pas à la fin de la liste 
       if (position == nbElements - 1) 
       { 
           throw new Exception("pas d’element suivant"); 
       } 
       // on déplace le pointeur sur l’élément suivant 
       position = position + 1; 
       return liste.get(position); 
   } 
   public T precedent() throws Exception 
   { 
       if (nbElements == 0) 
       { 
           throw new Exception("liste vide"); 
       } 
       // on vérifie si on n’est pas sur le premier élément 
       if (position == 0) 
       { 
           throw new Exception("pas d’élément précédent"); 
       } 
       // on se déplace sur l’élément précédent 
       position = position - 1; 
       return liste.get(position); 
   } 
}
et la petite appli pour l'utiliser :
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
 
package Cours;
 
import java.io.BufferedReader; 
import java.io.InputStreamReader;
import java.time.LocalDate; 
public class TestListeGenerique 
{ 
      static ListeGenerique<String> liste = new 
ListeGenerique<String>(5); 
 
      public static void main(String[] args) 
      { 
             liste.ajout("premier"); 
             liste.ajout("deuxième"); 
             liste.ajout("troisième"); 
             liste.ajout("quatrième"); 
             liste.ajout("cinquième"); 
             menu(); 
         } 
      public static void menu() 
      { 
        char choix='\0'; 
        System.out.println("p (premier)");
        System.out.println("< (précédent)");
        System.out.println("> (suivant)");
        System.out.println("d (dernier)");
        System.out.println("f (fin)");
 
 
        while (choix != 'f') 
        { 
            try 
            { 
                BufferedReader br; 
                   br=new BufferedReader(new 
InputStreamReader(System.in)); 
                   choix=br.readLine().charAt(0); 
                   switch (choix) 
                   { 
                   case 'p': 
                        System.out.println("le premier " +  
liste.premier()); 
                        break; 
                   case '<': 
                        System.out.println("le précédent " +  
liste.precedent()); 
                        break; 
                   case '>': 
                       System.out.println("le suivant " + liste.suivant()); 
                   break; 
              case 'd': 
                   System.out.println("le dernier " +  
liste.dernier()); 
                   break; 
           } 
       } 
       catch (Exception e) 
       { 
           System.out.println(e.getMessage()); 
       } 
            System.out.println("p (premier)");
            System.out.println("< (précédent)");
            System.out.println("< (suivant)");
            System.out.println("d (dernier)");
            System.out.println("f (fin)");
 
/* System.out.println("p (premier) < (précédent) >(suivant) d  
(dernier) f (fin)"); */
 } 
 
} 
}
Ceci fonctionne très bien, cependant si je veux l'utiliser avec un autre type de données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
 liste.ajout(new Personne("toto2GENERIC","prenom2",LocalDate.of(1922,2,15)));
j'ai l'erreur suivante : "The method ajout(String) in the type ListeGenerique<String> is not applicable for the arguments (Personne)"
En déclarant une autre liste :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
static ListeGenerique<Personne> liste2 = new 
    		  ListeGenerique<>(5);
ca marche, mais cela me semble curieux car ça ne correspond pas aux dires du cours, si quelqu'un a une idée Merci