0

我无法理解以下代码片段:

List<? extends Number> intList = Collections.nCopies(5, new Integer(10));
List<Object> objList = new ArrayList<Object>();

for(int i = 0; i < 5; i++) {

objList.add(new Object());

}

Collections.copy(objList, intList);

System.out.println("The objList is: " + objList);

复制方法的声明:

static <T> void copy(List<? super T> dest, List<? extends T> src);

我知道 byList<Object> objList = new ArrayList<Object>();objList.add(new Object());行 Object 正在替换 T 和 ? 并且由于复制方法的声明规定它的第一个参数应该是 T 的超类而不像extendssuper那么排他子句是这样吗?和 T 不能相同,我认为它不是有效代码。它可能更像这样:

List<Integer> objList = new ArrayList<Integer>(); (but it gives compilation error.

那么这段代码是如何工作的呢?你能解释一下吗?

4

1 回答 1

0

与您的理解相反,超关系是自反的,(因此,对于所有 T,T 是 T 的超类型)。

因此,一个令人满意的复制类型是:

void copy(List<Object>, List<Number>)

因为 Number 扩展了 Object,而 Object 是 Object 的超类型。

本教程对此进行了一些解释:http: //docs.oracle.com/javase/tutorial/extra/generics/morefun.html

于 2013-06-05T05:19:26.823 回答