Bonjour , en faite je suis entrain de lire un livre sur les generiques et les collections , et y'a un exemple qui m'a stoppé et j'arrive pas à comprendre : voici l'exemple:
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
| class Promote {
public static List<String> promote(List<Object> objs) {
for (Object o : objs) {
if (!(o instanceof String)) {
throw new ClassCastException();
}
}
return (List<String>) (List<?>) objs; // unchecked cast
}
public static void main(String[] args) {
List<Object> objs1 = Arrays.<Object>asList("one", "two");
List<Object> objs2 = Arrays.<Object>asList(1, "two");
List<String> strs1 = promote(objs1);
assert (List<?>) strs1 == (List<?>) objs1;
boolean caught = false;
try {
List<String> strs2 = promote(objs2);
} catch (ClassCastException e) {
caught = true;
}
assert caught;
}
} |
Ce que j'ai pas compris c'est dans la méthode promote, cette ligne là:
return (List<String>)(List<?>)objs; // unchecked cast
moi je pense qu'on peut se contenter de faire ça :
return (List<String>)objs;
Pourquoi on a du convertir la liste d'object en une liste<?> puis en une liste de String.
Merci beaucoup pour vos explications.
J'ai oublié de dire que l'exemple permet de convertir une liste d’objects en liste de String.
Partager