讲座说排序算法的结构如下。
public static <T extends Comparable<? super T> void sort<List<T> list
,如果排序中没有通配符,则下一个代码将发生错误。
class Car implements Comparable<Car> {
private int id;
public Car(int id) { this.id = id; }
@Override
public int compareTo(Car obj) {
return this.id - obj.id;
}
class ECar extends Car {
public ECar(int id) {
super(id);
}
}
public class Test {
public static void main(String[] args) {
List<ECar> list = new ArrayList<>();
list.add(new ECar(1200));
list.add(new ECar(1300));
Collections.sort(list); // it will error
}
}
原因是ECar类未实现Comparable<ECar>
我对此有疑问。尽管使用<? super T>
实现了排序,但这并不意味着实现Comparable<ECar>
。
带有下界的通配符使T可以接受Car和ECar Object。但是如何解决以上问题?