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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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à:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
return (List<String>)(List<?>)objs; // unchecked cast
moi je pense qu'on peut se contenter de faire ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.