为什么下面的代码不能编译?
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);
}
最佳答案
您不应该也不能将数字列表添加到整数列表;数字可能不是整数。但是,您可以将整数列表添加到数字列表,即您键入的内容的倒数。
这会起作用:
foo_test(integers, numbers);
具体来说,T
在您的代码中被推断为 Integer
,但 Number
不会扩展 Integer
, 所以这个调用是一个编译器错误。
切换到 foo_test(integers, numbers)
使得 T
被推断为 Number
,并且 Integer
确实扩展了 Number
, 以便编译。
关于java - 通配符类型匹配 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27029606/