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