日期:2014-05-20  浏览次数:20679 次

JAVA里的泛型
private static <E> void qsort(E[] array, int begin, int end, Comparator<? super E> cmp){}
这个是别人定义的一个函数,我想问的是
在关键字static 和函数名qsort之间的应该是返回类型吧?为什么有2个?一个<E>和void?虽然void是返回空,但这里也相当于是有2种返回类型吧?怎么理解?
Comparator<? super E> cmp这个我之前自己没有接触过 ,Comparator是容器么?当中的<? super E> 该如何理解?
在线求教!!

------解决方案--------------------
方法签名中的<E>代表此方法使用泛型符号E

void代表无返回值

Comparator<? super E>代表需要传入一个Comparator的对象,其泛型对象必须为E或E的超类

Comparator是一个比较器,里面只有一个方法int compareTo(E e1,E e2),这个是用来定义类E的比较逻辑的,具体说明可以去查API,这个接口在java.util包里
------解决方案--------------------
<E> 是泛型,表示这个是泛型方法,你在方法中声明了一个泛型,不是返回类型,返回类型还是void,然后你在调用的时候可以传任意的类型,参数中的Comparator<? super E> cmp是指Comparator一个接口,然后需要一个类型来约束他,<? super E> 表示这个泛型类继承自E这个类,也就是你前面声明的泛型E