[英]Difference between m1 and m2 generic method in Java
有人可以幫助我理解 m1() 和 m2() 通用方法之間的區別。
class C1 {
<T extends Number> void m1(List<T> list){
System.out.println(list);
for (T t : list){
System.out.println(t);
}
}
void m2(List<? extends Number> list){
for(Number n :list){
}
}
}
這兩個片段之間沒有功能差異。 它們做同樣的事情,同樣靈活,具有相同的簽名,並且基本上編譯成完全相同的類文件。
第一個片段說:有一些類型; 我們將其限制為java.lang.Number
或其某個子類型。 然后,這種類型出現兩次:一次作為列表中的類型參數(因此,它是數字列表、整數列表或雙精度列表等),一次作為變量的類型,當我們遍歷列表中的每個元素。 關於for (T t : list)
的 t 變量,您只能說它至少是java.lang.Number
但這就是您所知道的全部。
在第二個片段中,您說:我們有一個java.lang.Number
或其任何子類型的列表。 我們對這個列表所做的只是迭代它,在這一點上,您可以確定當您迭代這個列表時掉出的項目至少是一個java.lang.Number
。
在這兩種情況下,循環 var(第一個片段中的T t
,第二個片段中的Number n
)都綁定為java.lang.Number
並且可以用作數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.