我无法理解以下代码片段:
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 的超类而不像extends
,super
那么排他子句是这样吗?和 T 不能相同,我认为它不是有效代码。它可能更像这样:
List<Integer> objList = new ArrayList<Integer>(); (but it gives compilation error.
那么这段代码是如何工作的呢?你能解释一下吗?