首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >"?扩展E“和"T扩展E”的区别是什么?

"?扩展E“和"T扩展E”的区别是什么?
EN

Stack Overflow用户
提问于 2013-02-19 02:41:53
回答 2查看 915关注 0票数 3

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

代码语言:javascript
运行
复制
interface Collection <E> {
  ...
  public boolean addAll(Collection<? extends E> c);
  ...
}

为什么上面的内容不能写成:

代码语言:javascript
运行
复制
interface Collection <E> {
  ...
  public boolean addAll(Collection<T extends E> c);
  ...
}

有什么关系?这仅仅是语言的限制,还是在幕后有什么不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-19 02:43:30

它可以写成

代码语言:javascript
运行
复制
 public <T extends E> boolean addAll(Collection<T> c)

但这是没有意义的。不需要为该参数命名。

票数 8
EN

Stack Overflow用户

发布于 2013-02-19 02:44:59

如果该方法返回T类型的内容,那么这将是有意义的。然后,您可以匹配两种类型。但是,因为它只返回一个布尔值,所以您不需要这样做。这样就不需要设置名称T了,它仍然是一个问号。

假设addAll使用一个过滤器:

代码语言:javascript
运行
复制
public <T extends E> boolean addAll(Collection<T> c, Predicate<T> aFilter);

现在您知道了谓词有一个可以在集合c上操作的泛型类型。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14943181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档