簡體   English   中英

泛型有什么區別

[英]What is the difference between generics

好的,我在這個網站上讀了這個問題,但沒有回答我的要點。

假設我們這樣:

public <T extends Number> void someMethod(List<T> list)

public void someMethod(List<? extends Number> list)

考慮到我不需要任何下限或上限列表 那么拒絕這些東西, 在這種情況下又有什么區別呢? 因為? 是未知列表,T是T列表,但從這種情況看,它們在一側相似(上述方法)。

(請注意,我知道兩者之間的區別,但是在這種情況下,它看起來非常相似,我認為使用什么都沒有關系。)

這里:

public <T extends Number> void someMethod(List<T> list)

您可以在代碼中使用未知類型T。 例如:

T obj = list.get(0);
list.add(obj);

這是不可能的:

public void someMethod(List<? extends Number> list)

列出<? extends Number> <? extends Number>表示在此處擴展Number的任何內容。 所以假設你有像

public class  Example<T extends Number> {

public <T extends Number> void someMethod(List<T> list) ...

public <T extends Number> void someOtherMethod(List<T> list) ...

}

public class SomeClass extends Number {
}

public class SomeClass2 extends Number {
}

並且您創建了一個實例,例如

Example<SomeClass> myExample =  new Example<SomeClass>();

因此,當您要在此處使用方法時,輸入參數必須完全與SomeClass類相同,因此我們不能在此處使用SomeClass2。 例如,以下內容無效:

List<SomeClass2> someClass2 =  new ArrayList<SomeClass2>();
example.someMethod(someClass2);

但是如果使用<? extends Number> <? extends Number>為someMethod的輸入參數,則有可能。 您可以傳遞擴展Number,someClass2或3,4或任何其他類的任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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