JAVA中Comparable接口我们一般是嵌入到某个类中,实现comparaTo方法,用于比较两个类型之间的大小关系。在comparable接口中的源代码的注释上也是这样写的。但是我最近发现了一种新的用法:
public static void bubbleSort(E[] list,Comparable<? super E>comparable);
这样将会导致引入一个无对象的comparabe.comparaTo方法,这样comparaTo方法就只能传入一个E对象,没有办法进行两个对象间的比较了,我觉得很奇怪,其实这种用法是要用在什么地方的,请大神指教
针对没有实现Comparable接口的对象进行排序。或者对实现接口的对象进行不同类型的排序,比如,对象实现的是按名字排序,你可以传入一个按年龄排序的Comparable接口实现类。就可以按年龄排序了。
bubbleSort 的第二个参数只是 Comparable 接口啊,你用了实现类作为参数,就要实现comparaTo接口的,就会有对象进行比较
E是泛型,并不是参数,你要搞懂接口、实现、参数、泛型等概念
public static void bubbleSort(E[] list,Comparable<? super E>comparable);
要求数组元素是E类型,比较器的泛型参数是E类型或者它的子类。这要求正常合理。既然是排序E[],不是所有的comparable都可以,我拿一个Comparable<Integer>肯定不行吧。所以在参数层面加上限制。如果你传了不合理的比较器,在编译的时候就检查出来,这有什么奇怪的