Problème types génériques
Bonjour/Bonsoir à tous...
J'apprends en ce moment les types génériques, et bien que cela m'ait paru limpide à la lecture, c'est à l'application que ça se complique. Aussi, je viens quémander votre aide!
J'ai la classe suivante :
Code:
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
| package generics;
import scanner.*;
import java.util.*;
public class ListChoser<T> {
// Definir la methode chose, qui prend en premier parametre
// un message sous forme de chaene de caracteres et en second une liste.
// Cette liste est typee mais sans restriction sur les types admis.
// Cette methode propose de choisir un element de la liste en saisissant
// sa position dans la liste.
// L'element choisi est retourne par la methode, null si le choix 0 est fait.
//
public T chose(String str, List<T> list){
System.out.println(str);
System.out.println("0 -> aucun");
for (int i=0 ; i<list.size() ; i++) {
System.out.println((i+1) + " -> " + list.get(i).toString());
}
int j = TestScanner.saisieEntier((list.size())+1);
if (j==0) return null;
else return list.get(j-1);
} // Affiche les élements contenus dans la liste, on en choisit ensuite un qui
// est renvoyé par la methode. (si 0, renvoie null)
public static void main(String[] args) {
// JEU DE TEST
List<Carotte> lCarottes = new ArrayList<Carotte>();
lCarottes.add(new Carotte(1));
lCarottes.add(new Carotte(2));
lCarottes.add(new Carotte(3));
List<Pomme> lPommes = new ArrayList<Pomme>();
lPommes.add(new Pomme(1));
lPommes.add(new Pomme(2));
lPommes.add(new Pomme(3));
ListChoser<Carotte> lc = new ListChoser<Carotte>();
Carotte choixCarotte = lc.chose("quelle carotte ? ",lCarottes);
System.out.println("vous avez choisi : "+choixCarotte);
//Pomme choixPomme = lc.chose("quelle pomme ? ",lPommes);
//System.out.println("vous avez choisi : "+choixPomme);
}
} |
Mon problème se situe donc à la toute fin de ce code...
Je pensais qu'en instanciant mon ListChoser de la façon suivante :
Code:
ListChoser<?> lc = new ListChoser<?>();
Je pourrais ensuite appeler ma methode "chose" pour la liste de "Carotte" et celle de "Pomme"...
Mais à la compilation j'ai les erreurs suivantes :
Citation:
generics/ListChoser.java:40: unexpected type
found : ?
required: class or interface without bounds
ListChoser<?> lc = new ListChoser<?>();
^
generics/ListChoser.java:42: chose(java.lang.String,java.util.List<capture#431 of ?>) in generics.ListChoser<capture#431 of ?> cannot be applied to (java.lang.String,java.util.List<generics.Carotte>)
Carotte choixCarotte = lc.chose("quelle carotte ? ",lCarottes);
Excusez moi d'être un peu vague, je suis un peu pommé...
Sauriez vous me dire ce que je n'ai pas compris et comment faire ce que je veux faire?
Merci en tout cas.