ArrayList<Number> numbers = new ArrayList<Number>();
numbers.add(1);
numbers.add(2.3);
List<Double> doubles = Arrays.asList(1.2, 3.4, 46.7);
copy(numbers, doubles);
public <T> void copy(List<? super T> destination, List<? extends T> source) {
for (T s : source) {
destination.add(s); **// this working fine.**
}
System.out.println(destination);
}
以上代码有效。但是下面的代码使用起作用的原因是什么? 下面我清楚地告诉编译器Type是整数类型。
List<? super Integer> superInteger = Arrays.<Integer>asList(1, 2, 3);
superInteger.add(6); **//this will not give compile time errors but throw unsupportedexception**
答案 0 :(得分:3)
它与通配符或super
关键字无关。 Arrays#asList
方法返回固定大小的列表。您无法添加或删除它们。如果要改变列表,则需要创建一个新列表。
List<? super Integer> superInteger = new ArrayList<Integer>(Arrays.asList(1, 2, 3));
superInteger.add(6); // Now its fine