了解快速排序语法

Understanding QuickSort Syntax

我对这种语法感到困惑,因为起初它看起来好像函数应该 return <E> 但后来我看到 voidvoid 之前的 <E> 的目的是什么?

此外,我熟悉边界和泛型,但我从未真正见过这样的边界。这个语法是什么意思 Comparator<? super E>?

这是一个示例函数:

private <E> void sort(E[] array, Comparator<? super E>  cmp) {
   qsort(array, 0, array.length - 1, cmp);
}
Comparator<? super E>  

?是通配符,下界是 E.

例如:

private <E> void sort(E[] array, Comparator<? super E>  cmp)

如果你通过了

qsort(array, 0, array.length - 1, cmp);

if array is Number[] then lower bound of "?" is set to java.lang.Number ie "?" 可以是 Number.class 的超级 class。

第一个 <E> 不是类型 - 它是类型约束。

请记住 Java 通过类型擦除实现泛型 - 这意味着此方法的运行时类型签名是

private void sort(Object[] array, Comparator cmp)

(通过删除 <> 之间的所有内容)因此您的方法具有 return 类型 void.

<E>的作用是说输入数组和比较器的类型是相关的:比较器需要能够比较E类型的'things',但是它实际上不必只处理 exact 类型的东西 E.

这就是 <? super E> 的作用:例如,您可以有一个 Comparator<CharSequence>,然后用它来排序 String[],因为 StringCharSequence.

at first it appears as though the function should return <E> but then I see void

<E> 部分有一种语法,用于为泛型方法提供其类型参数。实际的 return 类型是 void.

What does this syntax mean Comparator<? super E>

这意味着比较器可能用于 E 或其任何超类。