Ce code est tiré du manuel de l'OCP. Pourquoi les versions 1 et 2 de la méthode addSound ne compilent-elles pas, alors que les versions 3 et 4 le font ? Le message d'erreur de compilation est "add(capture ) in List cannot be applied to java.lang.String".
public static void main(String[] args) {
List<String> strings = new ArrayList<>();
strings.add("tweet");
List<Object> objects = new ArrayList<>(strings);
addSound(strings);
addSound(objects);
}
//version 1
public static void addSound(List<?> list) {
list.add("quack");
}
//version 2
public static void addSound(List<? extends Object> list) {
list.add("quack");
}
//version 3
public static void addSound(List<Object> list) {
list.add("quack");
}
//version 4
public static void addSound(List<? super String> list) {
list.add("quack");
}