簡體   English   中英

“有什么區別?” 延伸E“和”T延伸E“?

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

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