En général,
Si une structure contient des éléments avec un type de forme ? extends E
, nous pouvons obtenir des éléments de la structure, mais nous ne pouvons pas mettre éléments dans la structure
List<Integer> ints = new ArrayList<Integer>();
ints.add(1);
ints.add(2);
List<? extends Number> nums = ints;
nums.add(3.14); // compile-time error
assert ints.toString().equals("[1, 2, 3.14]");
Pour mettre des éléments dans la structure, nous avons besoin d'un autre type de caractère générique appelé Wildcards with super
,
List<Object> objs = Arrays.<Object>asList(2, 3.14, "four");
List<Integer> ints = Arrays.asList(5, 6);
Collections.copy(objs, ints);
assert objs.toString().equals("[5, 6, four]");
public static <T> void copy(List<? super T> dst, List<? extends T> src) {
for (int i = 0; i < src.size(); i++) {
dst.set(i, src.get(i));
}
}
Dans le cas où (http://stackoverflow.com/users/970122/ted-gao) [réponse] [Ted Gao] (http://stackoverflow.com/a/9446233/2476755) est supprimée (puisqu'il s'agit d'un lien uniquement), voici le [blog] (http://ted-gao.blogspot.com/search/label/Java%20Generics) auquel il est lié . – royhowie