[英]Please help me understand the code
我無法理解以下代碼片段:
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);
我知道通過List<Object> objList = new ArrayList<Object>();
和objList.add(new Object());
lines對象正在替換T和? 並且由於復制方法的聲明規定其第一個參數應該是T的超類,而與extends
不同, super
是排除子句嗎? 和T一定不能相同,我看不到它是有效的代碼。 可能更像這樣:
List<Integer> objList = new ArrayList<Integer>(); (but it gives compilation error.
那么這段代碼是如何工作的? 你能解釋一下嗎?
與您的理解相反,超級關系是自反的(因此,對於所有T,T是T的超級類型)。
因此,令人滿意的復制類型為:
void copy(List<Object>, List<Number>)
因為Number擴展了Object,所以Object是Object的超類型。
本教程對此進行了一些解釋: http : //docs.oracle.com/javase/tutorial/extra/generics/morefun.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.