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:
Ce que j'ai pas compris c'est dans la méthode promote, cette ligne là: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 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; } }
moi je pense qu'on peut se contenter de faire ça :Code:return (List<String>)(List<?>)objs; // unchecked cast
Pourquoi on a du convertir la liste d'object en une liste<?> puis en une liste de String.Code:return (List<String>)objs;
Merci beaucoup pour vos explications.
J'ai oublié de dire que l'exemple permet de convertir une liste d’objects en liste de String.