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

标签 java generics collections subtyping

我是 Java 的新手,正在尝试从 Java 泛型和集合一书中理解以下奇怪的语法。(我​​广泛使用 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)

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

关于java - "? extends E"和 "T extends E"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14943181/

相关文章:

java - 问错误加载drawline

java - 创建一个发生在与 AtomicBoolean 的关系之前

java - 关于重载方法的泛型查询

java - HiLo 生成器策略不起作用

java - 如何制作一个通用的 ValueComparator 来对多个 HashMap 进行排序?

java - 设置网站轮询服务的最简单方法是什么?

java - 如何像在 Ruby 中那样用 Java 计算毫秒?

java - 如何从 Scala 调用将参数作为 List<Class<?>> 的 java 方法

java - 如何在类中引用嵌套模板参数的嵌套类型?

javascript - CollectionFS、Meteor.js、Summernote(WYSIWYG) 和文件上传