我正在审查JDK类的源代码。
以下方法签名使我感到困惑:
public static <T extends Comparable<? super T>> void sort(List<T> list);由于该方法不返回任何内容,那么所有的形式类型参数是什么?
如果该方法的签名仅为以下内容,其行为将如何改变:
public static void sort(List<T> list);发布于 2015-05-06 21:23:23
塞拉和贝茨SCJP:
泛型方法最奇怪的一点是,必须在方法的返回类型之前声明类型变量。
就像其他人说的,唯一的方法是
public static void sort(List<T> list);要工作,实际上有一个名为T的类,在这种情况下,参数就像变量的其他类型声明一样。
这也可以帮助我们考虑效仿塞拉和贝茨的做法。这表明形式类型参数是为了避免命名冲突。
class X { public <X> X(X x) {} } 是的,这很管用..。类名、类型参数占位符和变量标识符之间没有命名冲突。
那我们还有另外一个案子:
void sort(List<? extends Comparable> list)这个案例被称为捕获通配符。编译器从通配符中获取类型规范并创建匿名类型。其效果与显式类型规范相同,只是该类型不能用于方法实现。您可以将其想象为以下伪代码:
<T_?001> void sort_?001(List<T_?001> list)本例展示了形式参数的另一个目标--它们允许在方法实现中使用命名类型。
<T extends Comparable> void sort(List<T> list) {
Iterator<T> it = list.iterator();
}https://stackoverflow.com/questions/30072110
复制相似问题