我对这种语法感到困惑,因为起初它看起来好像函数应该返回 <E>
但后来我看到void
. <E>
的目的是什么?在 void
之前?
此外,我熟悉边界和泛型,但我从未真正见过以这种方式边界的东西。此语法是什么意思 Comparator<? super E>
?
这是一个示例函数:
private <E> void sort(E[] array, Comparator<? super E> cmp) {
qsort(array, 0, array.length - 1, cmp);
}
最佳答案
第一个<E>
不是类型 - 它是类型约束。
请记住,Java 通过类型删除实现泛型——这意味着该方法的运行时类型签名是
private void sort(Object[] array, Comparator cmp)
(通过删除 <>
之间的所有内容)所以您的方法具有返回类型 void
.
什么 <E>
确实是说输入数组和比较器的类型是相关的:比较器需要能够比较 E
类型的“事物”。 , 但它实际上不必只处理 exact 类型的事情 E
.
这就是<? super E>
做:例如,你可以有一个 Comparator<CharSequence>
, 然后用它来排序 String[]
, 自 String
是 CharSequence
的子类.
关于java - 了解快速排序语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31637853/