"?extends E"和"T extends E"有什么区别?

Kir*_*ran 3 java generics collections subtyping

我是java的新手,我正在尝试从Java Generics和Collections书中理解下面的奇怪语法.(我​​广泛使用C++模板,因此可以声称理解泛型编程的基础知识和可能的陷阱):

interface Collection <E> {
  ...
  public boolean addAll(Collection<? extends E> c);
  ...
}
Run Code Online (Sandbox Code Playgroud)

以上为什么不能写成:

interface Collection <E> {
  ...
  public boolean addAll(Collection<T extends E> c);
  ...
}
Run Code Online (Sandbox Code Playgroud)

有什么不同?这只是语言限制还是引擎盖下有什么不同?

Lou*_*man 7

它可以写成

 public <T extends E> boolean addAll(Collection<T> c)
Run Code Online (Sandbox Code Playgroud)

但没有意义.无需为该参数命名.

  • 你的意思是`public <T extends E> boolean addAll(Collection <T> c);` (2认同)