Jump to content

[Java]Compréhension d'un code[Résolu]


Premium

Recommended Posts

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...