簡體   English   中英

Java中m1和m2泛型方法的區別

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

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