为什么下面的代码不能编译?
public static <T> void foo_test(List<? extends T> src, List<T> dest) {
for (T o : src) {
dest.add(o);
}
}
public static void main(String [] args) {
List<Number> numbers = new ArrayList<Number>();
List<Integer> integers = new ArrayList<Integer>();
foo_test(numbers, integers);
}
答案 0 :(得分:5)
您不应该也不能将数字列表添加到整数列表中;数字可能不是整数。但是,您可以将一个整数列表添加到数字列表中,这是您键入内容的后退。
这将有效:
foo_test(integers, numbers);
详细说明,代码中T
被推断为Integer
,但Number
未延伸Integer
,因此调用是编译错误。
切换为foo_test(integers, numbers)
会将T
推断为Number
,Integer
会延伸Number
,以便进行编译。
答案 1 :(得分:1)
您需要切换integers
和numbers
。 src
列表必须是比dest
更具体的类型。