了解快速排序语法
Understanding QuickSort Syntax
我对这种语法感到困惑,因为起初它看起来好像函数应该 return <E>
但后来我看到 void
。 void
之前的 <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[]
,因为 String
是CharSequence
.
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
或其任何超类。
我对这种语法感到困惑,因为起初它看起来好像函数应该 return <E>
但后来我看到 void
。 void
之前的 <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[]
,因为 String
是CharSequence
.
at first it appears as though the function should return
<E>
but then I seevoid
<E>
部分有一种语法,用于为泛型方法提供其类型参数。实际的 return 类型是 void
.
What does this syntax mean
Comparator<? super E>
这意味着比较器可能用于 E
或其任何超类。