[英]wildcard type matching - Java
为什么以下代码无法编译?
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
,以便进行编译。
您需要切换integers
和numbers
。 src
列表必须是比dest
更具体的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.