Premium Posté(e) le 11 novembre 2006 Posté(e) le 11 novembre 2006 Bonjour, Est-ce que quelqu'un pourrait m'indiquer pourquoi ce code ne compile pas ? private static void print(List<Object> list) { for(Object o:list) System.out.println(o); } public static void main(String[] args) { List<String> list=Arrays.asList(args); print(list) } Merci
Sentinel Posté(e) le 12 novembre 2006 Posté(e) le 12 novembre 2006 Parce que, bien qu'un objet de type String soit assignable à une référence de type Object (car String dérive de Object), un objet de type List<String> ne peut être assigné à une référence de type List<Object>, car ces deux types n'appartiennent pas à la même hiérarchie. Tu ne peux donc pas utiliser une référence de type List<String> en argument d'une méthode acceptant une List<Object>. C'est un piège classique lorsqu'on commence à utiliser les génériques en Java5. Dans ton cas tu as deux solutions : Changer l'interface de ta méthode print en : private static void print (List<String> list), mais tu ne pourras plus passer que des List<String> en paramètre. Changer l'interface de ta méthode print en : private static void print (List<?> list), mais dans ce cas ton paramètre "list" sera restrint à la lecture seule dans la méthode.
Premium Posté(e) le 13 novembre 2006 Auteur Posté(e) le 13 novembre 2006 Parce que, bien qu'un objet de type String soit assignable à une référence de type Object (car String dérive de Object), un objet de type List<String> ne peut être assigné à une référence de type List<Object>, car ces deux types n'appartiennent pas à la même hiérarchie. Tu ne peux donc pas utiliser une référence de type List<String> en argument d'une méthode acceptant une List<Object>. C'est un piège classique lorsqu'on commence à utiliser les génériques en Java5. Dans ton cas tu as deux solutions : Changer l'interface de ta méthode print en : private static void print (List<String> list), mais tu ne pourras plus passer que des List<String> en paramètre. Changer l'interface de ta méthode print en : private static void print (List<?> list), mais dans ce cas ton paramètre "list" sera restrint à la lecture seule dans la méthode. Merci pour les précisions
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.