Pourquoi ce code compile-t-il :
ArrayList strings = new ArrayList();
strings.add("s1");
strings.add("s2");
ArrayList<Integer> numbers = new ArrayList<Integer>(strings);
Étant donné que le constructeur en question s'attend à un fichier Collection<? extends E>
où E
dans ce cas est Integer ? Comment les objets sont-ils contenus dans le type brut ArrayList
une sous-classe de E
? Ou existe-t-il une magie cachée du compilateur qui permet cela à des fins patrimoniales ?