簡體   English   中英

請幫助我理解代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM