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 :
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
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 lindex nest pas supérieur au nombre // déléments ou si lindex nest 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 lindex nest pas supérieur au nombre // déléments ou si lindex nest 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 lindex nest pas supérieur au nombre // déléments ou si lindex nest 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 nest pas à la fin de la liste if (position == nbElements - 1) { throw new Exception("pas delement 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 nest 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); } }
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
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)"); */ } } }
j'ai l'erreur suivante : "The method ajout(String) in the type ListeGenerique<String> is not applicable for the arguments (Personne)"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 liste.ajout(new Personne("toto2GENERIC","prenom2",LocalDate.of(1922,2,15)));
En déclarant une autre liste :
ca marche, mais cela me semble curieux car ça ne correspond pas aux dires du cours, si quelqu'un a une idée Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 static ListeGenerique<Personne> liste2 = new ListeGenerique<>(5);
Partager