[英]What is the difference between “? extends E” and “T extends E”?
我是java新手,我正在嘗試從Java Generics和Collections書中理解下面的奇怪語法。(我廣泛使用C ++模板,因此可以聲稱理解泛型編程的基礎知識和可能的陷阱):
interface Collection <E> {
...
public boolean addAll(Collection<? extends E> c);
...
}
以上為什么不能寫成:
interface Collection <E> {
...
public boolean addAll(Collection<T extends E> c);
...
}
有什么區別? 這只是語言限制還是引擎蓋下有什么不同?
它可以寫成
public <T extends E> boolean addAll(Collection<T> c)
但沒有意義。 無需為該參數命名。
如果方法返回類型為T的東西,那將是有意義的。然后你可以匹配這兩種類型。 但是因為它只返回一個布爾值,所以你不需要這樣做。 然后,不需要設置名稱T,它仍然只是一個問號。
假設addAll采用過濾器:
public <T extends E> boolean addAll(Collection<T> c, Predicate<T> aFilter);
現在你知道Predicate有一個可以在集合c上運行的泛型類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.