首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解带空返回类型的泛型参数

理解带空返回类型的泛型参数
EN

Stack Overflow用户
提问于 2015-05-06 09:01:19
回答 5查看 2.3K关注 0票数 2

我正在审查JDK类的源代码。

以下方法签名使我感到困惑:

代码语言:javascript
运行
复制
public static <T extends Comparable<? super T>> void sort(List<T> list);

由于该方法不返回任何内容,那么所有的形式类型参数是什么?

如果该方法的签名仅为以下内容,其行为将如何改变:

代码语言:javascript
运行
复制
public static void sort(List<T> list);
EN

Stack Overflow用户

发布于 2015-05-06 21:23:23

塞拉和贝茨SCJP:

泛型方法最奇怪的一点是,必须在方法的返回类型之前声明类型变量。

就像其他人说的,唯一的方法是

代码语言:javascript
运行
复制
public static void sort(List<T> list);

要工作,实际上有一个名为T的类,在这种情况下,参数就像变量的其他类型声明一样。

这也可以帮助我们考虑效仿塞拉和贝茨的做法。这表明形式类型参数是为了避免命名冲突

代码语言:javascript
运行
复制
class X { public <X> X(X x) {} } 

是的,这很管用..。类名、类型参数占位符和变量标识符之间没有命名冲突。

那我们还有另外一个案子:

代码语言:javascript
运行
复制
void sort(List<? extends Comparable> list)

这个案例被称为捕获通配符。编译器从通配符中获取类型规范并创建匿名类型。其效果与显式类型规范相同,只是该类型不能用于方法实现。您可以将其想象为以下伪代码:

代码语言:javascript
运行
复制
<T_?001> void sort_?001(List<T_?001> list)

本例展示了形式参数的另一个目标--它们允许在方法实现中使用命名类型。

代码语言:javascript
运行
复制
<T extends Comparable> void sort(List<T> list) {
  Iterator<T> it = list.iterator();
}
票数 1
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30072110

复制
相关文章

相似问题

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