背景
看跳表的实现代码1时看到T extends Comparable<? super T>,不太理解其含义。
理解
参考知乎2并自己测试后比较理解了。
java中向上转型是转为父类,向下转型是转为子类。extends确定了类型的上限,super确定了类型的下限。
T extends Comparable<? super T>的作用是什么呢?知乎这篇通过Demo<GregorianCalendar>的例子讲的很清楚了:
- Demo<T extends Comparable<? super T>>为类型Demo的泛型声明时,其泛型可以接收GregorianCalendar
- Demo<T extends Comparable<T>>为类型Demo的泛型声明时,则不可以接收GregorianCalendar作为泛型。原因是GregorianCalendar并未直接实现Comparable接口,其父类Calendar实现了Comparable<Calendar>接口,在其equals方法中通过调用super.compareTo(xx)方法来使用父类的compareTo。
结论,通过将泛型类型声明为T extends Comparable<? super T>,可以接收真正实现了接口的父类,以及继承了父类的子类。因为子类可以自动向上转型。